gpt4 book ai didi

c++ - 线程同步没有得到预期的输出

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

我没有得到任何输出,但我期望输出为 THREAD1 THREAD2 下面是代码..

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

using namespace std;

void* fun(void *arg)
{
char *msg;
msg = (char*)arg;
cout<<msg<<endl;
}

int main()
{

pthread_t t1,t2;

t1 = pthread_create(&t1,NULL,fun,(void*)"THREAD1");
t2 = pthread_create(&t2,NULL,fun,(void*)"THREAD2");

pthread_join(t1,NULL);
pthread_join(t2,NULL);
// sleep (2);
return 0;
}

我把上面的代码改成了

   pthread_create(&t1,NULL,fun,(void*)"THREAD1");
pthread_create(&t2,NULL,fun,(void*)"THREAD2");

现在我得到 THREAD2 THREAD1 但我需要 THREAD1 THREAD2

现在我将我的代码更改为 >

pthread_create(&t1,NULL,fun,(void*)"THREAD1");
pthread_join(t1,NULL);

pthread_create(&t2,NULL,fun,(void*)"THREAD2");
pthread_join(t2,NULL);

现在我的结果是正确的 THREAD1 THREAD2

最佳答案

t1 = pthread_create(&t1,NULL,fun,(void*)"THREAD1");

这样不好。 pthread_create 返回整数返回码,而不是 pthread_t。您正在用不应该存在的内容覆盖 t1t2,随后的 pthread_join 调用可能会崩溃或产生其他结果不可预测的结果。

int rc1 = pthread_create(...);
if (rc1 != 0) {
// handle error
}

此外,fun 需要按照您定义的方式返回某物。或者将其返回类型更改为 void。

关于c++ - 线程同步没有得到预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185692/

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