Кто как реализует потокобезопасность в своих классах при работе с разделяемыми ресурсами? Статический класс? Синхронизация (мьютексы, критические секции)? Статические члены класса?
Обращаете ли вы внимание на т.н. «Double-checked locking» (пресловутый Singleton, например). Что делаете?
Думаю, что все в зависимости от логики приложения. Мне приходилось использовать и семафоры, и мьютексы, и критические секции.
С double checked locking при написании приложения на C# проблему решает ключевое слово volatile.