没有exec的fork和共享对象使用的pthread_mutex_t

我正在使用一个Web服务器项目,执行没有一个exec fork 。 程序依赖于OpenSSL,而OpenSSL需要一些锁( CRYPTO_NUM_LOCKS是精确的,目前大约是40)。 在Linux上,这些锁通常是pthread_mutex_t ,并且在任何线程创build之前在主线程上安装/创build这些锁。

fork创造一个新的过程。 但是,在fork ,互斥锁中使用的句柄被浅拷贝。 也就是说,他们有相同的位,但我不认为他们在新的过程中有一个有用的价值。

我认为一般的问题是共享对象中的线程和叉的安全问题。 libcrypto上的OpenSSL wiki页讨论了线程和fork的安全性 ,我不知道如何解决一些问题。

有没有办法指定一个库(如OpenSSL)应该在fork上重新初始化?

Solutions Collecting From Web of "没有exec的fork和共享对象使用的pthread_mutex_t"

除非将它们放在共享内存中,并且使用设置为PTHREAD_PROCESS_SHARED的pthread_mutexattr_setpshared初始化互斥锁属性,否则互斥锁将无法在fork生效。

目前还不清楚是否分叉,然后创建线程或创建线程,然后分叉。 如果是后者,那么fork将只适用于调用fork的线程。 在新进程中没有其他线程被创建。

如果你分叉,然后线程化,互斥体只适用于子进程及其线程,那么只需在fork之后创建它们即可。