VB.net SyncLock 对象

标签 vb.net multithreading object thread-safety synclock

我总是在 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/

相关文章:

Java ParNew Collection 将对象移动到老年代

asp.net - 页面未重定向到默认错误页面

multithreading - 批处理的并行数据提取

c# - C#/VB.NET using 语句实际上对未实现 IDisposable 的类执行任何操作吗

multithreading - 如何正确构建 Twitter 的 future

wpf - WPF图像的持续(快速)更新

perl - 如何在 Perl 对象中定义前/后增量行为?

javascript - 保护 "private"类成员免遭修改

vb.net - 在VB.NET中从SQL数据库中删除记录

c# - 有时间限制的旅行推销员