当前位置: 技术问答>linux和unix
linux 多线程基础问题
来源: 互联网 发布时间:2017-04-09
本文导语: 代码很简单。 run1函数不执行(也或许所执行了,控制台没有打印?)。 就算如果加上主线程睡眠的话,就是不注释 sleep(1); 控制台打印 run success 就是说run1 函数执行了。 这是什么情况?不是应该并发执行的吗? ...
代码很简单。
run1函数不执行(也或许所执行了,控制台没有打印?)。
就算如果加上主线程睡眠的话,就是不注释 sleep(1);
控制台打印 run success
就是说run1 函数执行了。
这是什么情况?不是应该并发执行的吗?
run1函数不执行(也或许所执行了,控制台没有打印?)。
就算如果加上主线程睡眠的话,就是不注释 sleep(1);
控制台打印 run success
就是说run1 函数执行了。
这是什么情况?不是应该并发执行的吗?
#include
#include
#include
void * run1(void * arg){
puts("run successn");
pthread_exit(0);
}
int main(){
pthread_t t_id1;
int tmp = pthread_create(&t_id1, NULL, run1, NULL);
if(tmp == 0)
puts("create successn");
puts("mainn");
//sleep(1);
exit(0);
}
|
main() 不睡眠的话,会立即结束
主函数结束了,这个进程就结束了,所以子线程还来不及运行
也可以在主函数中调用pthread_join等待子线程的结束
主函数结束了,这个进程就结束了,所以子线程还来不及运行
也可以在主函数中调用pthread_join等待子线程的结束
|
不设置的话,一般主线程不会等子线程的,直接就完了
你去看现成的线程返利,都会发现执行线程的主线程是不会退出的
至于并发问题,我对内核了解不多,我只晓得,并发这个不靠谱
你去看现成的线程返利,都会发现执行线程的主线程是不会退出的
至于并发问题,我对内核了解不多,我只晓得,并发这个不靠谱
|
主函数结束了,这个进程就结束了,所以子线程还来不及运行
|
他们是在同一个进程里,但是你的线程还没执行到打印那里,主线程已经结束了, 所以不会出现打印的
但是你可以加一个函数等待子线程结束
pthread_join(tmp, NULL)