gpt4 book ai didi

c++ - 在不同线程中运行的函数产生奇怪的输出

转载 作者:行者123 更新时间:2023-11-28 02:02:49 26 4
gpt4 key购买 nike

您好,我是 C++ 多线程的新手。我正在使用 C++11 中可用的线程类,以便在不同的线程中运行一个函数,但不知何故,我从该函数获得的输出非常尴尬。这可能是因为不同的线程可能试图同时执行同一个变量,从而导致冲突。请建议我应该如何修改我的代码,以便获得正确的输出。我正在发布我正在尝试做的示例代码。这不是原始代码,但它只是显示了我的原始代码的流程,因为我的原始代码太长而无法发布,但是这两种情况的问题仍然相同。

    #include<iostream>
#include<thread>

using namespace std;

typedef struct {
int thread_id;
char *message;
}threadData;

int display(threadData *tData){
threadData *my_data;
my_data = (threadData *) tData;

cout << "Thread ID: " << my_data -> thread_id << endl;
cout << "Message: " << my_data -> message << endl;

return 0;
}

int main(){

threadData *data;

data = (threadData *)malloc(sizeof(threadData));
data->thread_id = 12;
data->message = "This is the message";
for (int i = 0; i<10; i++)
{
std::thread t1(display, data);
t1.detach();
}
return 0;
}

输出:

    Thread ID: 12
Message: This is the messageThread ID:
12
Message: This is the message
Thread ID: 12
Message: This is the message
Thread ID: 12
Message: This is the message
Thread ID: 12
Message: This is the message

最佳答案

我读到的是 for 循环预计运行 10 次,但它只运行了 4 次,原因是因为在 main 函数中你没有等待所有线程完成,所以主进程在其他线程之前退出有机会跑。 'main' 需要休眠一段时间以等待所有线程完成它们的工作。

我在这里没有看到竞争条件,因为所有线程都在读取,没有人写入 threadData。

关于c++ - 在不同线程中运行的函数产生奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38734693/

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