c - 如何使用未命名信号量在两个进程之间提供同步?

标签 c multithreading semaphore

任何人都可以解释“如何使用未命名信号量在两个进程之间提供同步?”。使用信号量时需要哪些函数调用以及信号量如何共享共享内存区域。 mmap()函数调用在同步中有什么用。

最佳答案

来自 sem_init 手册页:

   If pshared is non-zero, then the semaphore is shared between processes,
   and should be located in a region of shared  memory  (see  shm_open(3),
   mmap(2),  and  shmget(2)).   (Since a child created by fork(2) inherits
   its parent's memory mappings, it can also access the  semaphore.)   Any
   process  that  can  access  the shared memory region can operate on the
   semaphore using sem_post(3), sem_wait(3), etc.

因此,您应该使用 shm_open+mmapshmget+shmat 创建并附加共享内存。然后使用 sem_init 在该地址创建未命名信号量。使用 fork() 系统调用创建的子进程继承父进程的内存映射,因此您也可以在子进程中访问未命名的信号量。

关于c - 如何使用未命名信号量在两个进程之间提供同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29209341/

相关文章:

c - 0xC000005 读取时访问冲突,在 C 中使用 strcmp

c - 为什么我的函数会打印此语句?

c - 在c中获取输入字符串

java - 原子地获取多个锁

我们可以使用 pthread 库中的同步原语实现类似信号量的行为吗?

c++ - 在 C++ 程序中从 C 库调用函数时有什么陷阱吗?

java - 如何从另一个 Activity 触发一个 Activity 的方法调用?

C - 杀死线程分支

c - 使用共享内存和信号量实现管道

c# - 在 C# 中使用信号量