我有一个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()不能确保线程安全有什么意义呢?我在这里错过了什么吗?
我工作的很多项目的线程实现都很差,而且我是那些必须跟踪它们的傻瓜.是否有一种可接受的最佳方式来处理线程.我的代码总是在等待一个永不激活的事件.
我有点像设计模式或其他东西.