【发布时间】:2017-05-17 08:23:41
【问题描述】:
我在 Microsoft 的 C# 参考中阅读了以下内容:
lock("myLock") 是一个问题,因为进程中的任何其他代码 使用相同的字符串,将共享相同的锁。
具体是什么意思?
以下代码没有按我的预期工作吗? (我希望ReadyCount 是一致的)
public class Calculator
{
public int ReadyCount { get; private set; }
public void IncreaseReadyCount()
{
lock ("ReadyCount")
{
ReadyCount++;
}
}
public void Calculate()
{
Parallel.ForEach(list, litItem =>
{
IncreaseReadyCount();
});
}
}
【问题讨论】:
-
要明确:如果 all 你想做的是计数器的线程安全增量:
Interlocked.Increment是你的朋友(只要你也使用@987654324 @ 或类似的,当您想阅读它时,或Interlocked.CompareExchange绝对 100% 确定)
标签: c# parallel-processing locking parallel.foreach