Linux 如果我在创建子进程之前初始化互斥体,那么所有子进程都会使用互斥体吗?

Linux 如果我在创建子进程之前初始化互斥体,那么所有子进程都会使用互斥体吗?,linux,process,mutex,Linux,Process,Mutex,我已经做了一些挖掘,最接近于直接回答我的问题的是 我创建了一个互斥体,然后旋转成一个循环,在这个循环中,我侦听TCP/IP端口上的活动、fork、respond,然后从子端口退出。“响应”的一部分要求子进程自动访问硬件,该硬件由互斥锁保护 如果我在创建子进程之前初始化互斥体,所有可能同时运行的子进程是否都会使用互斥体?默认情况下不是这样 您必须将互斥锁存储在共享内存块中。您可以使用SysV IPC或MAP\u SHARED标志获取一个到mmap() 您还必须正确设置互斥体的属性。您需要使用pth

我已经做了一些挖掘,最接近于直接回答我的问题的是

我创建了一个互斥体,然后旋转成一个循环,在这个循环中,我侦听TCP/IP端口上的活动、fork、respond,然后从子端口退出。“响应”的一部分要求子进程自动访问硬件,该硬件由互斥锁保护

如果我在创建子进程之前初始化互斥体,所有可能同时运行的子进程是否都会使用互斥体?

默认情况下不是这样

您必须将互斥锁存储在共享内存块中。您可以使用SysV IPC或
MAP\u SHARED
标志获取一个到
mmap()

您还必须正确设置互斥体的属性。您需要使用
pthread\u mutextatr\u init()
创建一个互斥体属性,并调用
pthread\u mutextatr\u setpshared()
,然后将该属性传递给
pthread\u mutex\u init()

如果不使用共享内存,子进程将无法看到互斥状态,因为每个进程都将使用私有副本。如果不设置pshared属性,互斥锁可能会使程序崩溃,因为它不希望其他进程更改数据