MSS>Краткая суть lock-free: активно применяется InterlockedExchangePointer, причем, как я понял, без останова нитей в цикле "крутимся и ждем, пока тут станет не нуль".
иесть ещё пара способов из опыта функциональных языков. первый — это использование иммутабельных структур данных. вместо изменения существующих просто конструируются новые структуры, ес-но это требует GC для сколь-либо удобной работы
второй — STM, транзакционный подход к обновлению структур данных:
http://research.microsoft.com/%7Esimonpj/papers/stm/
я точно помню, что STM переносилось на какие-то С-подобные языки, поищи сам