我们有一个并发的多线程程序。 我如何使样本数每次增加+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);
}
这是它基于的另一个问题,
答案 0 :(得分:6)
我认为您想要Interlocked.Add
:
通过原子运算将两个整数相加并用和替换第一个整数。
int num = 0;
Interlocked.Add(ref num, 5);
Console.WriteLine(num);
答案 1 :(得分:1)
添加(即+=
)不是,也不能是原子操作(如您所知)。不幸的是,如果不加强栅栏,就无法实现这一目标,但从好的方面来说,它们在较低水平上已经相当优化。但是,您可以通过其他几种方法来确保完整性(特别是因为这只是一个补充)
Interlocked.Add
(最合理的解决方案)lock
(或Moniter.Enter
)。AutoResetEvent
以确保线程一一执行任务(meh sigh )。 int
,并在独占锁或类似锁定下将临时添加到总和上。ReaderWriterLockSlim
。Parallel.For
基于线程的累加,总和为Interlocked.Increment
,与4相同。