gpt4 book ai didi

c++ - 如何强制两个进程的执行顺序?

转载 作者:行者123 更新时间:2023-11-30 03:00:35 26 4
gpt4 key购买 nike

我有一个生成一定数量子进程的父进程。这些子进程做一些工作并通过进程间消息队列向父进程发送一条包含结果的消息。但是,我也希望子进程等待父进程向它们发送消息已被正确接收和处理的确认,并且只有在收到来自父进程的此类信号后才终止。

现在,代码看起来大致像这样:

parent                      child
spawn process
wait for message do processing
send message
receive message wait on condvar
save the message
notify the condvar resume execution
wait for child termination terminate

当然,如果父级在子级甚至开始等待之前对 condvar 执行 notify 就会导致死锁 - 如果发生这种情况,那么父级会等待子级退出, child 等待条件变量上的信号。

那么,我的问题是:如何确保子进程始终首先执行wait,即在父进程执行notify 之前?还是我完全错误地解决了整个问题?

提前谢谢你。

最佳答案

是的,您正在以错误的方式解决问题。或者更确切地说,以它们不应该工作的方式使用 condvars。 Condvar 是一种通知其他线程“某事”(条件)已更改的方法。正是该条件允许线程终止。

您需要三个元素才能使用 condvar:conditionmutexcondvar 本身。通知线程将执行以下操作:

{
unique_lock(mutex);
condition = true;
condvar.notify();
}

等待线程会做:

{
unique_lock(mutex);
while(!condition)
condvar.wait(mutex);
}

(使用 RAII 锁定互斥体,所以我不会传播直接调用 .lock().unlock() 方法永远是个好主意的看法)

请注意,while 很重要wait 可能会在没有通知的情况下虚假地醒来!

关于c++ - 如何强制两个进程的执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11840328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com