我认为这是一个常见的问题。例如,我有一个由一个进程/线程修改的数组:
lock();
for(int i; i<array_size; i++) {
// find an item and do some operations
}
unlock();
还有另一个进程/线程会偶尔打印整个数组,但可能需要“很长”的时间:
lock()
for(int i; i<array_size; i++) {
print(array[i]);
}
unlock();
有没有更好的方法来打印整个阵列?
答案 0 :(得分:3)
如果是需要很长时间的打印部件,你可以拿锁,拿一个数组副本,释放锁并打印数组副本。
答案 1 :(得分:1)
你使用什么样的锁,互斥?您还希望阵列中的各个单元格之间有什么样的一致性,何时(1)更新它们,以及(2)何时打印它们?如果每个阵列单元都是独立的,那么为什么不只是拥有更多的锁,每个锁只负责那些单元呢?
像;
mutex locks[array_size];
for (int i=0; i< mutex_size; i++) {
locks[i].lock();
// do something or print content...
locks[i].unlock();
}
但是,如果数组的语义不是彼此独立,而是整个数组需要原子一致性,那么你就会陷入原始的全局锁定。
但是你仍然可以在锁定下获取数组的副本,然后打印副本,因为这样可以使数组的锁定时间更短,而不必等待打印。