Да, это именно то, для чего используется свойство SyncRoot
. В частности, это означает, что, если будет создана другая коллекция «оберток», она, вероятно, будет использовать тот же SyncRoot
, поэтому каждый может по-прежнему синхронизироваться правильно.
Вы могли бы создать свой собственный объект блокировки, и это гарантировало бы абсолютную уверенность, что никто другой не заблокируется одновременно - но это также означало бы, что другой код не может безопасно работать с той же коллекцией. Это действительно зависит от сценария - может ли другой код использовать ту же коллекцию? Этот другой код находится под вашим контролем?
Обратите внимание, что вы должны снять блокировку для всех операций, а не только для постановки / снятия с очереди. В частности, если вы хотите перебрать коллекцию, вы должны удерживать блокировку на все это время, так как изменение в середине сделает недействительным итератор.