我有一个整数数组,用于跟踪 10,000 个并发任务的完成情况,其中值为 1 或 0。我认为如果这个数组是一个位数组并且每个并发线程都使用 interlocked 会更有效率。CompareExchange (或类似的)改变一个位。
如果 Interlocked 没有“位”的重载,我应该如何处理这个问题?
最佳答案
您可以在循环中使用 Interlocked.CompareExchange(ref int, int, int)
来伪造它,但我认为它不会更有效:
private static void SetBit(ref int valueToUpdate, int bitToSet)
{
while (true)
{
int oldValue = valueToUpdate;
int newValue = oldValue | bitToSet;
int result = Interlocked.CompareExchange(ref valueToUpdate, newValue, oldValue);
if (result == oldValue) break;
}
}
关于c# - 可以使用 Interlocked.CompareExchange with a Bit 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586075/