【发布时间】:2010-09-25 05:17:19
【问题描述】:
我有一个 Queue 对象,我需要确保它是线程安全的。使用这样的锁对象会更好:
lock(myLockObject)
{
//do stuff with the queue
}
还是建议这样使用Queue.Synchronized:
Queue.Synchronized(myQueue).whatever_i_want_to_do();
通过阅读 MSDN 文档,它说我应该使用 Queue.Synchronized 使其成为线程安全的,但随后它给出了一个使用锁定对象的示例。来自 MSDN 文章:
为了保证线程的安全 队列,所有操作都必须完成 仅通过此包装器。
通过集合枚举是 本质上不是线程安全的 程序。即使是一个集合 同步,其他线程仍然可以 修改集合,这会导致 枚举器抛出异常。 为了保证线程安全 枚举,您可以锁定 在整个收集 枚举或捕获异常 由其他人所做的更改导致 线程。
如果调用 Synchronized() 不能确保线程安全,那有什么意义呢?我在这里遗漏了什么吗?
【问题讨论】:
标签: c# multithreading queue