我有一个Queue对象,我需要确保它是线程安全的.使用这样的锁对象会更好吗:
lock(myLockObject)
{
//do stuff with the queue
}
Run Code Online (Sandbox Code Playgroud)
或者是否建议像这样使用Queue.Synchronized:
Queue.Synchronized(myQueue).whatever_i_want_to_do();
Run Code Online (Sandbox Code Playgroud)
从阅读MSDN文档开始,我说我应该使用Queue.Synchronized来使它成为线程安全的,但是它给出了一个使用锁对象的例子.来自MSDN文章:
为了保证Queue的线程安全,所有操作必须仅通过此包装器完成.
枚举通过集合本质上不是线程安全的过程.即使集合是同步的,其他线程仍然可以修改集合,这会导致枚举器抛出异常.为了在枚举期间保证线程安全,您可以在整个枚举期间锁定集合,也可以捕获由其他线程所做的更改导致的异常.
如果调用Synchronized()不能确保线程安全有什么意义呢?我在这里错过了什么吗?