我如何在子进程内部等待直到父进程达到某个点?

时间:2019-01-03 04:55:40

标签: c

伪代码:

Child:
...
wait until parent prints "blabla"
...

Parent:
...
print "blabla"
...

我不能使用wait,因为那是相反的方法,此外,我想在print "blabla"之后与子进程并行继续父进程。
我可以想象与mmap共享一个pthread_mutex_t变量并通过互斥来解决问题,但是我不确定,想问一下是否可能存在一个非常简单的解决方案。

2 个答案:

答案 0 :(得分:2)

您可以为此使用Signals, 在完成某些任务后,父进程应使用Kill系统调用并通过更新信号子进程的信号处理程序将信号发送给子进程,以执行进一步的任务。

孩子:     signal_handler()     {     ...     }     主要()     {     signal(SIGINT,signal_handler);     while(1); //等到父母打印“ blabla”     }

<input type="radio" value="male" [(ngModel)]="myRadio" name="gender" (click)="setGender('Male')" > Male
<input type="radio" value="female" [(ngModel)]="myRadio" name="gender" (click)="setGender('Female')"> Female

答案 1 :(得分:0)

具有两个全局变量,一个用于互斥锁,另一个用于这样的信号变量。

pthread_cond_t signal = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t cond_mutex = PTHREAD_COND_INITIALIZER;

当您在父线程中打印时,blabla信号子线程:

pthread_mutex_lock(&cond_mutex);
pthread_cond_signal(&signal);
pthread_mutex_unlock(&cond_mutex);

在您的子线程中等待信号:

struct timespec time_to_wait = {0, 0};
time_to_wait.tv_sec = time(NULL) + 10;//10 secs
pthread_mutex_lock(&cond_mutex);
status = pthread_cond_timedwait(&signal,&cond_mutex, &time_to_wait);
pthread_mutex_unlock(&cond_mutex);

您可以扩展此代码,以使其在循环中每隔“ t”秒重复等待条件发生,或者仅等待“ t”秒一次并退出。 请参考此ElemMatch documentation获取返回值。