我已经创建了一个同步队列和正在使用该队列的SyncRoot属性的SyncLock当调用的入队/出队方法。的方法是从标准的生产者/消费者类的实例调用。

是一个正确使用SyncRoot属性的?

它会更好的做法是在创建每个类的私人共享对象,并锁定在该代替?

请说明你的理由。

有帮助吗?

解决方案

是的,这也正是SyncRoot属性是什么。特别是,它意味着如果创建了另一个“包装”集合,它可能会使用相同的SyncRoot,所以大家还是可以正常同步。

您的可能的创建自己的锁定对象,这将绝对确保没有其他人在同一时间锁定 - 但它也意味着其他代码的无法的安全使用相同的收集工作。这真的取决于具体的方案 - 是其他代码能够使用相同的集合?在你的控制之下,其他的代码?

请注意,你应该拿出一个锁的所有的操作,而不仅仅是入队/出队。特别是,如果你想遍历集合,你应该持有那一整锁定时间,因为中间的变化将无效的迭代器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top