我有一个 Queue 对象,我需要确保它是线程安全的。使用这样的锁定对象会更好:
lock(myLockObject)
{
//do stuff with the queue
}
还是建议像这样使用 Queue.Synchronized :
Queue.Synchronized(myQueue).whatever_i_want_to_do();
通过阅读 MSDN 文档,它说我应该使用 Queue.Synchronized 使其成为线程安全的,但随后它给出了一个使用锁定对象的示例。来自 MSDN 文章:
为了保证 Queue 的线程安全,所有的操作都只能通过这个 wrapper 来完成。
通过集合进行枚举本质上不是线程安全的过程。即使一个集合被同步,其他线程仍然可以修改该集合,这会导致枚举器抛出异常。为了保证枚举过程中的线程安全,您可以在整个枚举过程中锁定集合,也可以捕获其他线程更改导致的异常。
如果调用 Synchronized() 不能确保线程安全,那有什么意义呢?我在这里错过了什么吗?