Interlocked.Increment 某数区间法

Interlocked.Increment Method by a Certain Number Interval

我们有一个并发的多线程程序。 我如何使样本数每次增加 +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:

Adds two integers and replaces the first integer with the sum, as an atomic operation.

int num = 0;
Interlocked.Add(ref num, 5);
Console.WriteLine(num);

添加(即 +=)不是也不可能是原子操作(如您所知)。不幸的是,如果不强制执行完整的围栏,就无法实现这一目标,从好的方面来说,这些都在低水平上进行了相当优化。但是,还有其他几种方法可以确保完整性(特别是因为这只是一个添加)

  1. 使用Interlocked.Add(最明智的解决方案)
  2. 在 for 循环外应用独占 lock(或 Moniter.Enter)。
  3. AutoResetEvent 以确保线程一个接一个地执行任务(meh sigh)。
  4. 在每个线程中创建一个临时文件 int,完成后将临时文件添加到独占锁或类似锁下的总和中。
  5. 使用ReaderWriterLockSlim.
  6. Parallel.For 基于线程的累积与 Interlocked.Increment 总和,与 4.
  7. 相同