vb.net - SyncRoot 上的 SyncLock

标签 vb.net multithreading synclock

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

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

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

请解释你的理由。

最佳答案

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

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

请注意,您应该为所有操作获取锁,而不仅仅是入队/出队。特别是,如果您想迭代集合,则应该在整个过程中保持锁定,因为中间的更改将使迭代器无效。

关于vb.net - SyncRoot 上的 SyncLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1119560/

相关文章:

c# - 如果 "using"有异常会自动关闭

mysql - 发生类型为 'System.NullReferenceException' 的未处理异常

vb.net - `Synclock syncroot` 和 `SyncLock Me` 和有什么区别?

objective-c - Mac 相当于 .Net SerialPort.ReadExisting()

.net - DataGridView 仅数字单元格?

multithreading - 哪些CPU体系结构支持比较和交换(CAS)?

python - 线程被阻塞调用阻塞 - 如何在阻塞调用上设置超时?

c++ - 线程加入 C++ 行为

.net - Synclock 和 WaitOne 的区别

time - GPS时钟的精度如何?