gpt4 book ai didi

c# - C# 数组线程安全吗?

转载 作者:IT王子 更新时间:2023-10-29 03:49:25 24 4
gpt4 key购买 nike

特别是

  1. 创建一个将数组和索引作为参数的函数。
  2. 创建一个 n 元素数组。
  3. 创建一个 n 计数循环。
  4. 在新线程的循环内,使用传入的索引器将对象的新实例分配给数组。

我知道如何管理线程等。我很想知道这是否是线程安全的做事方式。

 class Program
{
// bogus object
class SomeObject
{
private int value1;
private int value2;

public SomeObject(int value1, int value2)
{
this.value1 = value1;
this.value2 = value2;
}
}

static void Main(string[] args)
{

var s = new SomeObject[10];
var threads = Environment.ProcessorCount - 1;
var stp = new SmartThreadPool(1000, threads, threads);
for (var i = 0; i < 10; i++)
{
stp.QueueWorkItem(CreateElement, s, i);
}

}

static void CreateElement(SomeObject[] s, int index)
{
s[index] = new SomeObject(index, 2);
}
}

最佳答案

我相信,如果每个线程只在数组的一个单独部分上工作,一切都会好起来的。如果您要共享数据(即在线程之间进行通信),那么您将需要某种内存屏障来避免内存模型问题。

相信如果您产生一堆线程,每个线程都填充它自己的数组部分,然后使用Thread.Join ,这将在障碍方面做足够的事情来保证你的安全。请注意,我目前没有任何支持文件......

编辑:您的示例代码是安全的。两个线程绝不会访问同一个元素——就好像它们每个都有单独的变量一样。但是,它本身并没有用处。通常在某个时候,线程会想要共享状态——一个线程会想要读取另一个线程所写的内容。否则,他们写入共享数组而不是写入他们自己的私有(private)变量是没有意义的。 这就是您需要注意的地方 - 线程之间的协调。

关于c# - C# 数组线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460634/

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