锁定和操作耗时长
locking and operation taking long time
我认为这是一个常见的问题。例如,我有一个由一个进程/线程修改的数组:
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();
}
然而,如果数组的语义是这样的,即单元格不是彼此独立的,而是需要整个数组的原子一致性,那么您就只能使用原始的全局锁。
但是,您仍然可以将数组的副本锁定,然后打印副本,因为这样可以在更短的时间内保持数组的锁定,而不必等待打印。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何找到锁定Linux futex的C++行
- G锁定铸造到基础上会释放模拟行为
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何检查线程是否锁定
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 我应该在锁定TBitmap画布后解锁它吗
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 在 lambda 中锁定 std::shared_ptr 的复制操作
- std::atomic_flag不提供加载或存储操作有什么缺点吗?(自旋锁定示例)
- mutex或flock fcntl.h来锁定只写操作
- 如何使推送和弹出队列成为原子,如何锁定这些操作
- 锁定和操作耗时长
- 在进行托管到本机的互操作时,操作系统加载器锁定