我想使用一个互斥量,它将用于同步访问驻留在内存共享b/w两个不同进程中的一些变量。我怎样才能做到这一点。代码示例执行,将非常感激。带pthreads的进程间互斥
回答
改用
POSIX semaphore代替
(请参阅下文)使用1
。
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提到互斥锁只能通过它们的锁定线程才是最引人注目的。
ř
sem_init需要被共享非零pshared的参数,就像一个 互斥需要pshared的属性。没有理由为此选择 信号量超过互斥量,事实上互斥量会更好,因为您可以使用强大的互斥量,它允许您处理一个进程在锁定时死亡的情况(非常真实!)。
KUGA
此外,以R..`s后,一个互斥体只能由线程 用于锁定它发布。这通常是必需的,信号量不会提供此功能 。所以这不是正确的答案,杰夫的答案应该被标记为正确答案 。
这段代码够用吗? – MetallicPriest
@MetallicPriest足够的是什么?把更多的精力放在你的问题 – cnicutar
我的意思是,类型sem_t的变量是否需要一些特殊的初始化才能使它适用于进程间通信。 – MetallicPriest
以下示例演示了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;
}
- 1. C Pthreads互斥量值?
- 2. 互斥多进程
- 3. Perl中的进程间互斥
- 4. 使用pthreads和互斥体的OpenCV
- 5. Linux中的互斥进程
- 6. pthreads互斥锁断言错误
- 7. Pthreads:主要覆盖互斥锁
- 8. boost进程间共享互斥和boost进程间条件变量共享互斥
- 9. Java中互斥线程的互斥量?
- 10. Ruby中的子进程和互斥体
- 11. 互斥或不互斥互斥?
- 12. C++ - 进程之间共享的互斥体
- 13. 读写之间的互斥
- 14. 相互排斥和进程同步; C++
- 15. 跨进程使用互斥锁
- 16. pthread进程共享互斥死锁
- 17. 复制互斥从父到子进程
- 18. 多进程,一个互斥体
- 19. pthreads是否支持查询递归互斥锁的“锁计数”?
- 20. 互斥体作为使用pthreads的类成员
- 21. 在Windows中使用互斥进程间同步(win32或C++)
- 22. 加速进程间互斥和检查放弃
- 23. Boost进程间互斥进程崩溃而不是等待锁定?
- 24. 带互斥锁的WCF Web方法
- 25. 带有互斥项目的背包
- 26. C++ pthreads - 尝试锁定互斥读取时崩溃
- 27. Pthreads。如何检查互斥锁已锁定
- 28. C使用pthreads互斥锁同步问题
- 29. pthreads互斥体实现中是否存在基本错误?
- 30. 互斥
为什么你的标题说“pthreads”,但你问的是“过程”?无论如何,你如何在内存映射之间共享内存? –
我在分叉之前分配内存。所以一个过程是父母,另一个是孩子。通过pthread,我的意思是使用pthread_mutex_lock。 – MetallicPriest
我觉得'fork'会创建内存的_copies_,所以它不完全是“共享”的。 –