C++解决子线程没有被执行的问题
Posted 玛丽莲茼蒿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++解决子线程没有被执行的问题相关的知识,希望对你有一定的参考价值。
一个进程一个内存区,如果这个进程分裂出多个线程,那么这些线程共享这个进程的内存区。
在下面的代码中,main函数开始执行时,是一个进程,pthread_create创建了一个子线程,那么main自动退化为主线程。主线程拥有CPU的优先使用权,所以这里会发生一个运行上的逻辑错误,就是主线程把自己的代码执行完毕了,然后释放了占用的内存,子线程还没有抢到CPU,子线程就无法执行了,也就是下面的callback任务没有被执行。
void *callback(void* arg)
for(int i=0;i<5;i++)
printf("子线程:%ld\\n",pthread_self());
return NULL;
int main()
pthread_t tid;//子线程的id
pthread_create(&tid,NULL,callback,NULL);
//子线程执行的函数(任务),函数的参数
for(int i=0;i<5;i++)
printf("主线程:%ld\\n",pthread_self());
return 0;
解决方法就是让主线程等一等,sleep函数让主线程放弃CPU,这时候子线程就可以接管了。
void *callback(void* arg)
...
int main()
pthread_t tid;
pthread_create(&tid,NULL,callback,NULL);
...
sleep(3); //睡几秒没有关系,睡就行了
return 0;
以上是关于C++解决子线程没有被执行的问题的主要内容,如果未能解决你的问题,请参考以下文章