问题: 父进程先开启一个子线程,子线程中调用pthread_mutex_lock。再fork子进程,子进程同样调用pthread_mutex_lock ,导致的死锁问题。
sleep() 替换 nanosleep() 纳秒精度
//sleep(1);
struct timespec ts = {1, 0};
nanosleep(&ts, NULL);
一、未调用atfork(),导致子进程调用pthread_mutex_lock 时发生死锁
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <wait.h>
pthread_mutex_t mutex;
void *another(void *arg)
{
printf("in child thread, lock the mutex\n");
pthread_mutex_lock(&mutex);
printf("parent lock..\n");
sleep(5);
pthread_mutex_unlock(&mutex);
printf("parent unlock..\n");
// 解锁两