分叉子进程使用相同的信号量吗?

前端之家收集整理的这篇文章主要介绍了分叉子进程使用相同的信号量吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我创建了一个信号量.如果我分叉一堆子进程,它们还会使用相同的信号量吗?

另外,假设我创建了一个内部和分叉信号量的结构.所有子进程是否仍然使用相同的信号量?如果没有,将结构信号量存储在共享内存中是否允许子进程使用相同的信号量?

我真的很困惑我的分叉子进程如何使用相同的信号量.

解决方法

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也具有condvarsmutexes的pshared属性)

请注意,使用MAP_SHARED标志创建的匿名mmaps计为(匿名)共享内存用于这些目的,因此不必实际创建命名共享内存段. fork之后不会共享普通的堆内存.

猜你在找的C&C++相关文章