gpt4 book ai didi

c++ - 奇怪的线程打印行为

转载 作者:行者123 更新时间:2023-11-30 00:42:02 25 4
gpt4 key购买 nike

嘿 - 我写的一个小玩具程序有一个奇怪的问题,用于尝试线程。
这是我的代码:

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

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

void *threadFunc(void *arg) {
cout << "I am a thread. Hear me roar." << endl;

pthread_exit(NULL);
}

int main() {
cout << "Hello there." << endl;
int returnValue;
pthread_t myThread;

returnValue = pthread_create(&myThread, NULL, threadFunc, NULL);

if (returnValue != 0) {
cout << "Couldn't create thread! Whoops." << endl;
return -1;
}

return 0;
}

在 main 中的第一个 cout 没有被注释掉的情况下,线程打印正常。
但是,如果没有它,线程根本不会打印任何内容。

有什么帮助吗?

最佳答案

试试这个:

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

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

void *threadFunc(void *arg) {
cout << "I am a thread. Hear me roar." << endl;

pthread_exit(NULL);
}

int main() {
//cout << "Hello there." << endl;
int returnValue;
pthread_t myThread;

returnValue = pthread_create(&myThread, NULL, threadFunc, NULL);

if (returnValue != 0) {
cout << "Couldn't create thread! Whoops." << endl;
return -1;
}

pthread_join( myThread, NULL);

return 0;
}

我的代码和你的代码之间的区别是一行 - pthread join。这会暂停主线程,直到子线程有机会完成其操作。

在您的代码中,执行到达第一个 cout 并被处理。然后,您分离出另一个线程,主线程继续运行直到结束,在整理辅助线程之前可能会或可能不会到达。这就是奇怪的行为出现的地方 - 你正在经历的是主程序在子线程有机会完成之前完成的情况,因此程序已经“返回”并且内核清理了所有内容。

关于c++ - 奇怪的线程打印行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156894/

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