我在 单线程环境 中有以下过程:

int[] ages = { 40, 30, 18, 23, 60, 24 };
for (int i = 0; i < ages.Length; i++)
{
    if (ages[i] < 21) ages[i] = 0;
}

例如,但现在我想在 多线程环境 中执行此过程。
是否有并发集合模拟多线程环境中的数组?

最佳答案

最接近的解决方案是使用 ConcurrentDictionary 使用索引作为键。在这种情况下,哈希函数会非常好:

var dict = new ConcurrentDictionary<int, int>(Enumerable.Range(0, ages.Length).ToDictionary(i => i, i => ages[i]));
Parallel.For(0, dict.Count,
    i =>
    {
        int value;
        if (dict.TryGetValue(i, out value) && value < 21)
            dict.TryUpdate(i, value, 0);
    });

请注意这个特定示例根本不需要使用 ConcurrentDictionary 的事实,因为您在每次迭代之间没有依赖性。
Parallel.For(0, ages.Length,
    i =>
    {
        if (ages[i] < 21) ages[i] = 0;
    });

此代码非常适合您的示例。下次使用更复杂的东西,比如数组元素的总和。

希望这有帮助!

关于c# - 并发集合中数组的等价物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45868851/

10-12 04:16