【发布时间】:2019-11-22 17:52:31
【问题描述】:
我想同步多个进程。我提出了两种可能的方法: 1.文件锁 2. 使用共享内存的进程间互斥
但是共享内存有点复杂,我不确定我是否可以使用它而不会对我的进程中运行的其他模块产生副作用。所以我更喜欢文件锁的方式。
但是文件锁只提供shared lock和exclusive lock,没有条件变量(据我所知..)。有没有其他方法可以这样做?还是我别无选择,只能共享内存?
添加:
我想要一个条件变量的原因是我想限制共享锁持有者的数量。
我想出了一个方法,只使用一个简单的独占文件锁,如下面的伪代码所示:
RETRY:
file_lock.unique_lock();
if (counter == MAX_PROCESS_ALLOW) {
file_lock.unlock();
goto RETRY;
}
// successful get into the pool
++counter;
file_lock.unlock();
// do some thing here
// exit the pool
file_lock.unique_lock();
--counter;
file_lock.unlock();
但是这种方法的问题是查询繁忙。或者我可以选择睡觉,但是睡眠时间很难确定......
【问题讨论】:
-
你能解释一下你的实际问题是什么吗?为什么流程需要同步?你想阻止什么事情发生?
-
另见信号量
-
@DavidSchwartz 他们是一些工作进程,他们会不时运行一些消耗CPU的任务(当有人将任务提交给那些进程时),并且我系统中还有其他进程在运行,所以我想限制运行任务的活动工作进程的最大数量,这样它们就不会从其他进程中占用太多的计算资源。
-
@ZiqiLiu 你的操作系统不提供一些工具吗?这似乎是操作系统最好的做法,因为它实际上知道还有什么在争夺资源。
-
@DavidSchwartz 你的意思是调整进程优先级吗?我正在使用 Ubuntu 16。
标签: c++ c linux multiprocessing mutex