我总是在 SyncLock 示例中看到人们使用
Private Lock1 As New Object ' declaration
SyncLock Lock1 ' usage
但是为什么呢? 在我的具体情况下,我锁定一个队列以避免多线程数据入队和出队问题。
我可以像这样锁定队列对象本身吗?
Private cmdQueue As New Queue(Of QueueItem) ' declaration
SyncLock cmdQueue ' usage
任何帮助表示赞赏。 谢谢。
编辑:
感谢所有的答案,但 tcarvin 的答案正是我正在寻找的。 该队列是我的单例 Comms 对象的私有(private)对象,该对象对要发送的新消息进行排队(通过 Send 方法公开),该队列在该对象内的工作线程中一次消耗一条消息,并且我在锁内拥有的唯一代码是对入队和出队的一次调用。
最佳答案
其他发帖者的明智建议确实如此。但答案是肯定的,可以使用Queue对象来锁定。您可以使用任何对象。在您的代码片段中,您将队列实例声明为私有(private),因此您可能会避免其他人锁定您的队列对象的常见问题(假设您没有将该对象传递到类之外)。不过,最佳实践建议使用专用对象,这样以后就不会有人更改您的代码,然后公开用于锁定的队列对象。
关于VB.net SyncLock 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947269/