一定间隔的互锁增量方法

时间:2019-02-18 06:29:12

标签: c# .net-core .net-core-2.0

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

这是它基于的另一个问题,

C# Creating global number which increase by 1

2 个答案:

答案 0 :(得分:6)

我认为您想要Interlocked.Add

  

通过原子运算将两个整数相加并用和替换第一个整数。

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

答案 1 :(得分:1)

添加(即+=)不是,也不能是原子操作(如您所知)。不幸的是,如果不加强栅栏,就无法实现这一目标,但从好的方面来说,它们在较低水平上已经相当优化。但是,您可以通过其他几种方法来确保完整性(特别是因为这只是一个补充)

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