.net - 对int []数组的并发读取访问: Is it safe?快速吗?

标签 .net multithreading arrays multicore

在四核计算机上,我正在考虑C#/。NET算法的并行化,该算法涉及让多个线程同时读取小的int []数组。到目前为止,它似乎工作得还不错,但是我不确定在哪里指定在.NET中对数组的并发读取是否是线程安全的。有指针吗?

然后,我也想知道这种方法是否真的有效?在某些情况下,您最好实际为每个线程复制输入数据,以便不进行任何并发读取,并且每个数组(也许吗?)都有机会在亲和力CPU附近进行缓存?

对多核CPU的最佳实践有何想法?

最佳答案

在您的情况下,对数组的并发读取将是线程安全的。

至于算法的有效性,取决于阵列的大小,如果它适合高速缓存,那么您可能会看到出色的性能提升,因为多核有效地“争夺”了CPU中的高速缓存。如果他们正在努力用相同的信息填充缓存,那么他们将共享意味着更多的缓存命中率和更好的性能。

假设您的数组适合缓存...

关于.net - 对int []数组的并发读取访问: Is it safe?快速吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/556367/

相关文章:

c# - 如何使用 Reactive 限制消费顺序?

java - 如何等待 ExecutorService 中正在运行的线程之一完成以分配另一个任务

algorithm - 数组中的二进制搜索

java - Android String Edit和Array的值定位

javascript - 对于较大的数组 - 返回 NaN 而不是数字

.net - 回发或回调参数无效。使用 '<pages enableEventValidation="true"/>' 启用事件验证

c# - SSLStream 读取无效数据 + KB3147458 SSLStream 错误(?)

.NET 的 Version 类的 Java 等价物?

c# - 使用 StackExchange.Redis 的 Redis 键空间通知

java - Thread.currentThread().getId() 和 Kernel32.INSTANCE.GetCurrentThreadId() 之间的区别