Лично я считаю, что синхронизация отдельных методов обычно не так полезна, как кажется.
Как правило, вы можете захотеть сделать связанные "get" и "put" в тесной последовательности, и если другой поток просматривает те же значения, у вас есть немедленная гонка потоков. Аналогично (в зависимости от сценария) вы не хотите кто-то читает значения, над которыми вы работаете.
Для широкого подхода простое использование внешнего Monitor
(lock(...)
может хорошо работать во многих ситуациях. Он прост, легок и, если у вас нет тяжелой нити, чем адекватный.
Для более сложных сценариев такие вещи, как ReaderWriterLockSlim
и т. Д. Более гибкие. Но я бы начал с простого и изменил бы все, если профилирование показывает, что есть подлинная проблема конкуренции.
Как отмечает Джон, с Parallel Extension приходит совершенно новый набор высокопроизводительных устройств синхронизации; из того, что я вижу (например, здесь , здесь и здесь ), это часть .NET 4.0