pthread_mutex_unlock(&shmseg->shm_mutex);
fprintf(stdout,"unlocked mutex\n");
pthread_cond_broadcast(&shmseg->donewriting);
fprintf(stdout,"signalled condition\n");
调用此代码的进程显示第一个print语句,但只是挂起并且不运行第二个print语句。与此同时,另一个进程正在等待这个条件(这是一个shmseg的成员,一个从两个进程有权访问的mmap返回的共享内存段转换的结构)。我很乐意分享任何其他人认为可能相关的代码段。据我所知,互斥锁和条件变量已被设置为进程共享,
pthread_mutexattr_t m_attr;
pthread_condattr_t c_attr;
pthread_mutexattr_init(&m_attr);
pthread_mutexattr_setpshared(&m_attr, PTHREAD_PROCESS_SHARED);
pthread_condattr_init(&c_attr);
pthread_condattr_setpshared(&c_attr, PTHREAD_PROCESS_SHARED);
pthread_cond_init(&seg->donewriting, &c_attr);
pthread_mutex_init(&seg->shm_mutex, &m_attr);
这些陈述以前由其他流程运行。
这对任何人都有意义吗?