GCC编译器问题

Leonard@LL 2018-10-21 10:08:35
我是一个学习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;
}
然后我的执行结果却是这样的
...全文
299 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leonard@LL 2018-10-22
  • 打赏
  • 举报
回复
好的我先试试
勤1 2018-10-22
  • 打赏
  • 举报
回复
试试wait
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);
}
}
勤1 2018-10-22
  • 打赏
  • 举报
回复
事实wait
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);
}
}
Leonard@LL 2018-10-22
  • 打赏
  • 举报
回复
引用 2 楼 whoami_I 的回复:
你的意思是不是I am child 和 child process的输出位置很奇怪
对对,就是输出位置我感觉太奇怪了
  • 打赏
  • 举报
回复
我也遇到过这样的情况,还没有解决。就是他的输出位置不对应该是:
main process
I am prepare
I am parent
parent process
I am child
child process
root@xiaoyi..........
但是结果却是上面的那种情况,不知道为什么?
Leonard@LL 2018-10-22
  • 打赏
  • 举报
回复
对对,就是输出位置我感觉太奇怪了
whoami_I 2018-10-22
  • 打赏
  • 举报
回复
你的意思是不是I am child 和 child process的输出位置很奇怪
勤1 2018-10-22
  • 打赏
  • 举报
回复
期望什么结果啊?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧