Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net SyncRoot上的SyncLock_Vb.net_Multithreading_Synclock - Fatal编程技术网

Vb.net SyncRoot上的SyncLock

Vb.net SyncRoot上的SyncLock,vb.net,multithreading,synclock,Vb.net,Multithreading,Synclock,我已经创建了一个同步队列,并且在调用Enqueue/Dequeue方法时正在该队列的SyncRoot属性上使用SyncLock。这些方法是从标准生产者/消费者类的实例调用的 这是否正确使用了SyncRoot属性 在每个类中创建一个私有共享对象并锁定它会更好吗 请解释您的推理。是的,这正是SyncRoot属性的用途。特别是,这意味着如果创建了另一个“包装器”集合,它可能会使用相同的SyncRoot,因此每个人仍然可以正确同步 您可以创建自己的lock对象,这将绝对确保没有其他人同时被锁定,但这也意

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

这是否正确使用了SyncRoot属性

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


请解释您的推理。

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

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

请注意,您应该为所有操作打开一个锁,而不仅仅是入/出队列。特别是,如果您想迭代集合,则应该保存整个时间的锁,因为中间的更改会使迭代器无效。