Tag: condition variable

发信号通知条件变量(pthreads)

假设某些条件变量“cond”与互斥变量“mutex”相关联。 如果线程在调用pthread_cond_wait(&cond,&mutex)后在cond上hibernate,并且另一个已锁定mutex锁的线程完成,那么该线程在调用pthread_mutex_unlock(&mutex)之前或之后是否调用pthread_cond_signal(&cond)是否重要? 如果调用pthread_cond_signal(&cond) ,它是否甚至需要解锁互斥锁,因为睡眠线程无论如何都会获取互斥锁? 编辑:根据https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview ,“调用pthread_cond_signal()后未能解锁互斥锁可能不允许匹配的pthread_cond_wait()例程完成(它将保持阻塞状态)。 “ 我想那时,解锁,也许只是之后才需要。

是否保证pthread_cond_signal会唤醒等待的线程?

这是一个普遍的问题。 例如,当前有两个子线程调用了pthread_cond_wait(&cond1,&mutex) ,它们都在等待。 然后,父线程调用 pthread_cond_signal(&cond1); pthread_cond_signal(&cond1); 接下来,我的问题是,是否可以保证两个等待线程都会被唤醒?(假设第一个线程被唤醒,稍后在执行的某个阶段释放互斥,以便第二个线程可以获取它)。 我问这个问题的原因是,对于Unix系统级信号,信号(比如SIGCHLD )没有排队,因此如果连续传送多个相同类型的信号可能会丢失。 所以我想知道pthread_cond_signal是以不同方式实现的,这样如果调度程序碰巧让父线程连续两次发出信号,它们就不会丢失?

在进程之间共享条件变量和互斥:是否必须先锁定互斥锁?

我需要一些帮助来了解如何在C中使用条件变量来解决练习。 这是一个小例子: #include #include #include #include #include #include #include #include #include #include #define OKTOWRITE “/oktowrite” #define MESSAGE “/message” #define MUTEX “/lock” int main(int argc, char** argv) { pthread_cond_t* condition; pthread_mutex_t *mutex; char* message; int des_cond, des_msg, des_mutex; int mode = S_IRWXU | S_IRWXG; des_mutex = shm_open(MUTEX, O_CREAT | O_RDWR | O_TRUNC, mode); if (des_mutex < […]