Sup*_*ell 5 .net c# multithreading synchronization
在 C# 中进行线程同步时,我是否应该在读取值或只是更改它时锁定对象?
例如我有 Queue<T> 对象。我应该在执行入队和出队时锁定它,还是在检查诸如 Count 之类的值时也应该锁定它?
来自 MSDN:
只要集合不被修改,Queue<(Of <(T>)>) 就可以同时支持多个读取器。即便如此,通过集合进行枚举本质上并不是线程安全的过程。为了保证枚举过程中的线程安全,可以在整个枚举过程中锁定集合。要允许多个线程访问集合以进行读写,您必须实现自己的同步。
您应该确保在项目排队时没有任何读取器处于活动状态(锁可能是一个好主意)。
查看反射器中的计数可以发现来自私有字段的读取。这可能没问题,具体取决于您对该值的处理方式。这意味着你不应该做这样的事情(没有适当的锁定):
if(queue.Count > 0)
queue.Dequeue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |