fork之后应当谨慎使用锁:
这是因为fork有一个特点,那就是子进程只会保留调用fork的那个线程,父进程中其他的线程在子进程中都会消失。但是fork之后,除了文件锁以外,其他的锁都会被继承。这就导致了,如果在子进程中,对某个已经在父进程中加了锁的锁继续加锁,就会导致死锁发生。并且我们无法对该锁进行解锁,因为在子进程中,该锁的持有者并不存在。
下面给一个例子:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/wait.h>
pthread_mutex_t mutex;
pthread_mutexattr_t attr;
void thread_func(void *arg)
{
pthread_mutex_init(&mutex, &attr);
pthread_mutex_lock(&mutex);
sleep(10);
}
int main()
{
pthread_t tid;