Another basic technique is state distribution, it helps to turn logically read-only accesses into physically read-only accesses wrt shared state. Well distributed state (partition for each thread/processor) can be considered as non-shared state for our needs. The underlying idea is that each reader thread/processor obtains a separate piece of state, and works mostly with it. While writers (hopefully episodically and infrequently) synchronize with each reader's state.
Now we are ready to get our hands dirty with some real stuff. What is currently available here is: