进程间互斥与pthreads

我想要使​​用一个互斥锁,这将用于同步访问一些variables驻留在内存共享b / w两个不同的进程。 我怎样才能做到这一点。 代码示例执行,将不胜感激。

Solutions Collecting From Web of "进程间互斥与pthreads"

改为使用初始化为1的POSIX信号量 。 (见下面)使用sem_init作为未命名信号量或sem_open作为命名信号。

 sem_t sem; /* initialize using sem_init or sem_open */ sem_wait(&sem); /* critical region */ sem_post(&sem); 

在最初发布这个答案之后多年,它必须被更新。

应该使用互斥而不是信号量 。 R和kuga的意见(下文逐字抄录)解释了原因。 特别是我发现kuga提到互斥锁只能通过它们的锁定螺纹才能post引人注目。


[R

sem_init要求共享非零pshared参数,就像互斥体需要pshared属性一样。 没有理由选择信号量而不是互斥量,事实上互斥量会更好,因为你可以使用一个强大的互斥量,它可以处理一个进程死锁的非常真实的情况。

玖珂

除了R的帖子之外,互斥体只能由锁定它的线程发布。 这通常是必需的,信号量不提供此功能。 所以这不是正确的答案,杰夫的答案应该被标记为正确的答案。

以下示例演示了Pthread进程间互斥体的创建,使用和销毁。 将多个进程的例子推广为读者的练习。

 #include <pthread.h> pthread_mutex_t shm_mutex; int main(void) { int err; pthread_mutexattr_t attr; err = pthread_mutexattr_init(&attr); if (err) return err; err = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); if (err) return err; err = pthread_mutex_init(&shm_mutex, &attr); if (err) return err; err = pthread_mutexattr_destroy(&attr); if (err) return err; err = pthread_mutex_lock(&shm_mutex); if (err) return err; err = pthread_mutex_unlock(&shm_mutex); if (err) return err; err = pthread_mutex_destroy(&shm_mutex); if (err) return err; return 0; }