SyncRoot上的SyncLock

时间:2009-07-13 13:51:16

标签: vb.net multithreading synclock

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

这是否正确使用了SyncRoot属性?

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

请解释你的推理。

1 个答案:

答案 0 :(得分:6)

是的,这正是SyncRoot属性的用途。特别是,这意味着如果创建了另一个“包装器”集合,它可能会使用相同的SyncRoot,因此每个人仍然可以正确同步。

可以创建自己的锁定对象,这样可以绝对确保没有其他人同时锁定 - 但这也意味着其他代码无法< / em>安全地使用相同的集合。这真的取决于场景 - 其他代码是否能够使用相同的集合?那是你控制下的其他代码吗?

请注意,您应该锁定所有操作,而不仅仅是Enqueue / Dequeue。特别是,如果你想迭代集合,你应该保持整个时间的锁,因为中间的更改将使迭代器无效。