另外,假设我创建了一个内部和分叉信号量的结构.所有子进程是否仍然使用相同的信号量?如果没有,将结构信号量存储在共享内存中是否允许子进程使用相同的信号量?
我真的很困惑我的分叉子进程如何使用相同的信号量.
解决方法
Let’s say I create a semaphore. If I fork a bunch of child processes,will they all still use that same semaphore?
如果您使用的是SysV IPC信号量(semctl),那么是.如果您正在使用POSIX信号量(sem_init),那么是,但创建时为only if you pass a true value for the pshared argument并将其放在共享内存中.
Also,suppose I create a struct with semaphores inside and forked. Do all the child processes still use that same semaphore? If not,would storing that struct+semaphores in shared memory allow the child processes to use the same semaphores?
你是什么意思’内部的信号量’?将共享对SysV IPC信号量的引用,因为信号量不属于任何进程.如果您正在使用POSIX信号量,或者使用pthreads互斥锁和condvars构建某些内容,则需要使用共享内存和pshared属性(pthreads也具有condvars和mutexes的pshared属性)
请注意,使用MAP_SHARED标志创建的匿名mmaps计为(匿名)共享内存用于这些目的,因此不必实际创建命名共享内存段. fork之后不会共享普通的堆内存.