相关疑难解决方法(0)

在C#中,最好使用Queue.Synchronized或lock()来保证线程安全吗?

我有一个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()不能确保线程安全有什么意义呢?我在这里错过了什么吗?

c# queue multithreading

58
推荐指数
4
解决办法
5万
查看次数

线程最佳实践

我工作的很多项目的线程实现都很差,而且我是那些必须跟踪它们的傻瓜.是否有一种可接受的最佳方式来处理线程.我的代码总是在等待一个永不激活的事件.

我有点像设计模式或其他东西.

multithreading

43
推荐指数
5
解决办法
3万
查看次数

标签 统计

multithreading ×2

c# ×1

queue ×1