【问题标题】:SyncLock on SyncRootSyncRoot 上的 SyncLock
【发布时间】:2009-07-13 13:51:16
【问题描述】:

我创建了一个同步队列,并在调用 Enqueue/Dequeue 方法时对该队列的 SyncRoot 属性使用了 SyncLock。这些方法是从标准生产者/消费者类的实例中调用的。

这是对 SyncRoot 属性的正确使用吗?

在每个类中创建一个私有共享对象并锁定它会更好吗?

请解释你的理由。

【问题讨论】:

    标签: vb.net multithreading synclock


    【解决方案1】:

    是的,这正是 SyncRoot 属性的用途。特别是如果再创建一个“包装器”集合,它可能会使用相同的SyncRoot,所以大家仍然可以正确同步。

    可以创建自己的锁定对象,这将绝对确保没有其他人同时锁定 - 但这也意味着其他代码不能 安全地使用同一个集合。这真的取决于场景 - 其他代码是否能够使用相同的集合?其他代码是否在您的控制之下?

    请注意,您应该为所有操作取出锁,而不仅仅是入队/出队。特别是,如果你想迭代集合,你应该一直持有锁,因为中间的变化会使迭代器失效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多