gpt4 book ai didi

c# - 我应该如何为争用最少的循环线程方案增加一个数字?

转载 作者:行者123 更新时间:2023-11-30 14:00:42 25 4
gpt4 key购买 nike

如果许多线程同时调用 GetNextNumber 和以下代码,GetNextNumber 将比任何其他数字多返回 1 次。

private class RoundRobbinNumber
{
private int _maxNumbers = 10;
private int _lastNumber;

private RoundRobbinNumber(int maxNumbers)
{
_maxNumbers = maxNumbers;
}

public int GetNextNumber()
{
int nextNumber = Interlocked.Increment(ref _lastNumber);
if (_lastNumber > _maxNumbers)
{
Interlocked.CompareExchange(ref _lastNumber, 1, _maxNumbers);
nextNumber = 1;
}
return nextNumber;
}
}

有没有办法将 _lastNumber 重置为 1,并为每个调用 GetNextNumber() 的线程可靠地返回递增的数字,而无需使用锁?

最佳答案

Andrey 没有条件语句的回答:

using System;
namespace Utils
{
public class RoundRobinCounter
{
private int _max;
private int _currentNumber = 0;

public RoundRobinCounter(int max)
{
_max = max;
}

public int GetNext()
{
uint nextNumber = unchecked((uint)System.Threading.Interlocked.Increment(ref _currentNumber));
int result = (int)(nextNumber % _max);
return result;
}
}
}

这是一个 .net fiddle运行这段代码。

关于c# - 我应该如何为争用最少的循环线程方案增加一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10034289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com