为SyncLock上SyncRoot上
-
12-09-2019 - |
题
我已经创建了一个同步队列和正在使用该队列的SyncRoot属性的SyncLock当调用的入队/出队方法。的方法是从标准的生产者/消费者类的实例调用。
是一个正确使用SyncRoot属性的?
它会更好的做法是在创建每个类的私人共享对象,并锁定在该代替?
请说明你的理由。
解决方案
是的,这也正是SyncRoot
属性是什么。特别是,它意味着如果创建了另一个“包装”集合,它可能会使用相同的SyncRoot
,所以大家还是可以正常同步。
您的可能的创建自己的锁定对象,这将绝对确保没有其他人在同一时间锁定 - 但它也意味着其他代码的无法的安全使用相同的收集工作。这真的取决于具体的方案 - 是其他代码能够使用相同的集合?在你的控制之下,其他的代码?
请注意,你应该拿出一个锁的所有的操作,而不仅仅是入队/出队。特别是,如果你想遍历集合,你应该持有那一整锁定时间,因为中间的变化将无效的迭代器。
不隶属于 StackOverflow