【发布时间】:2013-02-17 19:44:18
【问题描述】:
我正在编写一些具有全局数组的代码,该数组可以被两个线程访问以用于读写目的。
在读取或写入一系列索引的情况下不会进行批处理,因此我试图确定是应该锁定整个数组还是只锁定我当前使用的数组索引。
最简单的解决方案是将数组视为 CS 并在其周围放置一个大锁,但我可以避免这种情况并只锁定一个索引吗?
干杯。
【问题讨论】:
-
你可以。如果这不是您所期望的答案,改进问题应该会导致改进的答案。
-
您必须自行决定什么是要锁定的“逻辑”数据分组(然后确定如何按组锁定)。
-
我认为您需要使用真实的运行场景进行分析,以确定您锁定的粒度级别。
-
@ring0 - 这将取决于阵列上的内容。就像 32 位系统上的 64 位变量一样简单,并且不再是原子的了
-
我假设的是基本类型。对于更复杂的类型,每 100 个索引一个信号量:
lock sem[index/100]... 会减少内存使用量。
标签: c++ c multithreading thread-safety pthreads