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++解决子线程没有被执行的问题的主要内容,如果未能解决你的问题,请参考以下文章

C++11 多线程

C++系列6:多线程

解决python tkinter 与 sleep 延迟问题

子线程频繁更新ui导致界面卡顿问题?

如何解决 C++ 中的未释放锁问题

多线程,多进程使用过程中的问题和解决方案