锁定和操作耗时长

locking and operation taking long time

本文关键字:操作 锁定      更新时间:2023-10-16

我认为这是一个常见的问题。例如,我有一个由一个进程/线程修改的数组:

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();

有没有更好的方法来打印整个数组?

如果是打印部分需要很长时间,您可以获取锁,获取数组的副本,释放锁并打印数组副本。

您使用哪种锁,互斥锁?此外,当(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();   
}

然而,如果数组的语义是这样的,即单元格不是彼此独立的,而是需要整个数组的原子一致性,那么您就只能使用原始的全局锁。

但是,您仍然可以将数组的副本锁定,然后打印副本,因为这样可以在更短的时间内保持数组的锁定,而不必等待打印。