多くのスレッドが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
元に戻して、スレッド呼び出しごとに増分された数を確実に返す方法はありますか?GetNextNumber()