我是一个学习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;
}
然后我的执行结果却是这样的
解决方案 »
- Apache Tomcat 8.0.39 如何下载?
- win10 安装ubuntu 14.04之后开机选择操作系统时出错求助!!
- framebuffer如何显示argb?
- ubuntu下qt交叉编译环境的配置,为什么交叉编译环境都配好了,使用qt creator生成的可执行文件是x86_64的,不是arm的?
- 华硕主板BIOS 从独立显卡改成集成显卡显示
- cp 源文件存在硬链接时,更新现有目标文件导致硬链接被创建
- linuxI/O多路复用中关于epoll_wait的疑问
- Ubuntu系统安装不了 头皮发麻 求大佬解答
- 安装openmp, source /etc/profile 报错
- 我在win10上安装了一个red hat linux 8.0,没有引导,请问一下如何添加引导,能让双系统正常使用
- 安装fedora28,显示屏一直闪动,无法操作
- 最小化Linux安装
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);
}
}