我想使用一个互斥锁,它将用于同步访问驻留在内存中的一些变量,这两个变量共享两个不同的进程.我怎样才能做到这一点.要执行的代码示例将非常感激.
Jef*_*eff 10
以下示例演示了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;
}
Run Code Online (Sandbox Code Playgroud)
使用初始化为的POSIX 信号量(见下文)1。sem_init用于未命名的信号量或sem_open命名的信号量。
sem_t sem;
/* initialize using sem_init or sem_open */
sem_wait(&sem);
/* critical region */
sem_post(&sem);
Run Code Online (Sandbox Code Playgroud)
在最初发布此答案多年后,必须对其进行更新。
实际上应该使用互斥体而不是信号量。R 和 kuga 的评论(在下面逐字复制)解释了原因。特别是我发现 kuga 提到的互斥锁只能post通过它们的锁定线程进行编辑,这点最引人注目。
电阻
sem_init 需要共享一个非零的 pshared 参数,就像互斥锁需要 pshared 属性一样。没有理由为此更喜欢信号量而不是互斥锁,实际上互斥锁会更好,因为您可以使用强大的互斥锁,它允许您处理(非常真实!)一个进程在持有锁时死亡的情况。
库加
除了 R.. 的帖子外,互斥锁只能由锁定它的线程发布。这通常是必需的,而信号量不提供此功能。所以这不是正确答案,杰夫的答案应该被标记为正确答案。
| 归档时间: |
|
| 查看次数: |
10336 次 |
| 最近记录: |