日期:2014-05-16  浏览次数:20584 次

linux 多线程基础问题
代码很简单。
run1函数不执行(也或许所执行了,控制台没有打印?)。
就算如果加上主线程睡眠的话,就是不注释 sleep(1);
控制台打印 run success
就是说run1 函数执行了。

这是什么情况?不是应该并发执行的吗?



#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>

void * run1(void * arg){

puts("run success\n");
pthread_exit(0);
}

int main(){
pthread_t t_id1;
int tmp = pthread_create(&t_id1, NULL, run1, NULL);
if(tmp == 0)
puts("create success\n");
puts("main\n");
//sleep(1);
exit(0);
}
Linux 多线程 C

------解决方案--------------------
main() 不睡眠的话,会立即结束

主函数结束了,这个进程就结束了,所以子线程还来不及运行

也可以在主函数中调用pthread_join等待子线程的结束
------解决方案--------------------
不设置的话,一般主线程不会等子线程的,直接就完了
你去看现成的线程返利,都会发现执行线程的主线程是不会退出的
至于并发问题,我对内核了解不多,我只晓得,并发这个不靠谱
------解决方案--------------------
主函数结束了,这个进程就结束了,所以子线程还来不及运行
------解决方案--------------------
引用:
Quote: 引用:

main() 不睡眠的话,会立即结束

主函数结束了,这个进程就结束了,所以子线程还来不及运行

也可以在主函数中调用pthread_join等待子线程的结束


 可是在主线程不会等待子线程结束吗? 他们是不是在一个进程里?


他们是在同一个进程里,但是你的线程还没执行到打印那里,主线程已经结束了, 所以不会出现打印的
但是你可以加一个函数等待子线程结束
pthread_join(tmp, NULL)