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等待子线程的结束
------解决方案--------------------不设置的话,一般主线程不会等子线程的,直接就完了
你去看现成的线程返利,都会发现执行线程的主线程是不会退出的
至于并发问题,我对内核了解不多,我只晓得,并发这个不靠谱
------解决方案--------------------主函数结束了,这个进程就结束了,所以子线程还来不及运行
------解决方案--------------------
他们是在同一个进程里,但是你的线程还没执行到打印那里,主线程已经结束了, 所以不会出现打印的
但是你可以加一个函数等待子线程结束
pthread_join(tmp, NULL)