我们有一个并发的多线程程序。如何使样本数每次增加+5个间隔? Interlocked.Increment,是否有间隔超载?我没有看到它列出。
Microsoft Interlocked.Increment Method
// Attempt to make it increase by 5
private int NumberTest;
for (int i = 1; i <= 5; i++)
{
NumberTest= Interlocked.Increment(ref NumberTest);
}
这是另一个基于它的问题,
我想你想要Interlocked.Add
:
添加两个整数并将第一个整数替换为sum,作为原子操作。
int num = 0;
Interlocked.Add(ref num, 5);
Console.WriteLine(num);
添加(即+=
)不是也不能是原子操作(如您所知)。不幸的是,如果没有强制执行完整的围栏,就没有办法实现这一目标,从好的方面来看,这些都是在较低的水平上进行了相当优化。但是,有几种方法可以确保完整性(特别是因为这只是一个添加)
Interlocked.Add
(最安静的解决方案)lock
(或Moniter.Enter
)。AutoResetEvent
确保线程逐个完成任务(meh叹气)。int
,并在完成时将temp添加到独占锁或类似项下的总和上。ReaderWriterLockSlim
。Parallel.For
基于线程积累与Interlocked.Increment
总和,与4相同。