gpt4 book ai didi

c++ - Linux 多线程 - 线程不会按预期产生任何输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:46 24 4
gpt4 key购买 nike

我正在学习 Linux 平台的多线程。我写了这个小程序来熟悉这些概念。在运行可执行文件时,我没有看到任何错误,也没有打印 Hi。因此,我在看到输出后让线程休眠。但是还是看不到控制台上的打印。

我还想知道哪个线程在运行时打印。谁能帮帮我?

#include <iostream>
#include <unistd.h>
#include <pthread.h>

using std::cout;
using std::endl;

void* print (void* data)
{
cout << "Hi" << endl;
sleep(10000000);
}

int main (int argc, char* argv[])
{
int t1 = 1, t2 =2, t3 = 3;
pthread_t thread1, thread2, thread3;
int thread_id_1, thread_id_2, thread_id_3;
thread_id_1 = pthread_create(&thread1, NULL, print, 0);
thread_id_2 = pthread_create(&thread2, NULL, print, 0);
thread_id_3 = pthread_create(&thread3, NULL, print, 0);
return 0;
}

最佳答案

您的主线程可能退出,因此整个进程终止。因此,线程没有机会运行。如果线程在主线程退出之前完成执行,您也有可能(不太可能但仍然有可能)看到线程的输出,即使您的代码是原样的。但你不能依赖它。

调用 pthread_join(),它会挂起调用线程,直到线程(由线程 ID 指定)返回,在 main 中 pthread_create() 调用之后的线程上():

pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
pthread_join(thread3, NULL);

您还可以使用 pthread_t 数组,这样您就可以在 pthread_create() 上使用 for 循环pthread_join() 调用。

或者使用pthread_exit(0) 只退出主线程,这将仅退出调用线程,其余线程(您创建的线程)将继续执行。

注意你的线程函数应该返回一个指针或NULL:

void* print (void* data)
{
cout << "Hi" << endl;
return NULL;
}

不确定是否在线程退出时进行高休眠,这是不必要的,并且会阻止线程退出。可能不是您想要的东西。

关于c++ - Linux 多线程 - 线程不会按预期产生任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40501086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com