I'm interested in techniques people use to publish information and changes to data structures that are being shared across multiple threads without losing much concurrency. In my personal experience I come across the single writer/multiple readers quite often, where a single thread is updating an object, but multiple threads are reading from the object and need to be informed of changes.
As a simple example, consider a hashtable (let's assume it is thread safe, whether through coarse-grained locking, fine-grained locking, or low-lock techniques, etc). Thread 1 is responsible for putting and removing information from the hashtable, but is the only writer. Other threads may wish to be informed when any key is changed, a certain key is changed, or any variant. What they wish to subscribe to is not particularly important.
What techniques (I'd love suggestions for papers) would you use to make sure threads receive timely and correct change information?