我是一个学习Linux的小白,按照教程敲的代码,但是执行之后的结果却很诡异,不知道怎么回事,希望大佬们可以帮忙看一下
我先贴出自己的程序:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <limits.h>
#include <syspes.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sysan.h>
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void prepare()
{
pthread_mutex_lock(&mutex);
printf("I am prepare\n");
}
void parent()
{
pthread_mutex_unlock(&mutex);
printf("I am parent\n");
}
void child()
{
pthread_mutex_unlock(&mutex);
printf("I am child\n");
}
void *thread_fun(void *arg)
{
sleep(1);
pid_t pid;
pthread_atfork(prepare,parent,child);
pid=fork();
if(pid == 0)
{
pthread_mutex_lock(&mutex);
printf("child process\n");
pthread_mutex_unlock(&mutex);
}
if(pid > 0)
{
pthread_mutex_lock(&mutex);
printf("parent process\n");
pthread_mutex_unlock(&mutex);
}
}
int main()
{
pthread_t tid;
if(pthread_create(&tid,NULL,thread_fun,NULL))
{
printf("create new thread failure\n");
return ;
}
pthread_mutex_lock(&mutex);
sleep(1);
printf("main process\n");
pthread_mutex_unlock(&mutex);
pthread_join(tid,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
然后我的执行结果却是这样的
我先贴出自己的程序:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <limits.h>
#include <syspes.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sysan.h>
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void prepare()
{
pthread_mutex_lock(&mutex);
printf("I am prepare\n");
}
void parent()
{
pthread_mutex_unlock(&mutex);
printf("I am parent\n");
}
void child()
{
pthread_mutex_unlock(&mutex);
printf("I am child\n");
}
void *thread_fun(void *arg)
{
sleep(1);
pid_t pid;
pthread_atfork(prepare,parent,child);
pid=fork();
if(pid == 0)
{
pthread_mutex_lock(&mutex);
printf("child process\n");
pthread_mutex_unlock(&mutex);
}
if(pid > 0)
{
pthread_mutex_lock(&mutex);
printf("parent process\n");
pthread_mutex_unlock(&mutex);
}
}
int main()
{
pthread_t tid;
if(pthread_create(&tid,NULL,thread_fun,NULL))
{
printf("create new thread failure\n");
return ;
}
pthread_mutex_lock(&mutex);
sleep(1);
printf("main process\n");
pthread_mutex_unlock(&mutex);
pthread_join(tid,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
然后我的执行结果却是这样的
main process
I am prepare
I am parent
parent process
I am child
child process
root@xiaoyi..........
但是结果却是上面的那种情况,不知道为什么?
void *thread_fun(void *arg)
{
int status = 0;
sleep(1);
pid_t pid;
pthread_atfork(prepare,parent,child);
pid=fork();
if(pid == 0)
{
pthread_mutex_lock(&mutex);
printf("child process\n");
pthread_mutex_unlock(&mutex);
}
if(pid > 0)
{
pthread_mutex_lock(&mutex);
printf("parent process\n");
pthread_mutex_unlock(&mutex);
wait(&status);
}
}
void *thread_fun(void *arg)
{
int status = 0;
sleep(1);
pid_t pid;
pthread_atfork(prepare,parent,child);
pid=fork();
if(pid == 0)
{
pthread_mutex_lock(&mutex);
printf("child process\n");
pthread_mutex_unlock(&mutex);
}
if(pid > 0)
{
pthread_mutex_lock(&mutex);
printf("parent process\n");
pthread_mutex_unlock(&mutex);
wait(&status);
}
}