gpt4 book ai didi

c++ - 在 pthread 中使用共享变量

转载 作者:行者123 更新时间:2023-11-30 04:45:11 27 4
gpt4 key购买 nike

在下面的示例代码中,我使用共享变量将信息传递给线程。 maintest 将被调用几次,每次都会创建一个包含新信息的新线程。我使用互斥锁定来确保共享数据正确传递到相应的线程。

出于某种原因,我无法使用结构数据类型将信息作为参数传递给线程,因为我使用的软件具有自定义数据类型,每次它都会使我的应用程序崩溃。

有人可以告诉我下面的实现是否正确吗?

    void* fun1(void* a);    

int threadCnt;
int arg_tnum;
float arg_measArray;
string arg_waveID;
float arg_Freq;
bool arg_enablePlots;
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
pthread_t th1[10];

void maintest()
{
pthread_mutex_lock( &mutex1 );
arg_tnum = threadcnt+10;
arg_freq = arg_tnum * 2;
arg_measArray = arg_Freq *3;
arg_enablePlots =true;
pthread_mutex_unlock( &mutex1 );

threadCnt = threadCnt+1;
pthread_create(&th1[threadCnt],NULL,fun1,NULL);

}

void* fun1(void* a)
{
int index;
float freq;
float meas;
bool enableplt;

pthread_mutex_lock( &mutex1 );
index = arg_tnum;
freq = arg_Freq;
meas = arg_measArray;
enableplt = arg_enablePlots;
pthread_mutex_unlock( &mutex1 );

//print all the values
cout << index << endl;
cout << freq << endl;
cout << meas << endl;
cout << enableplt << endl;
return NULL;
}

最佳答案

1) 为什么不使用标准机制,即 std::threadstd::mutex

2) 不,代码不正确。在第二次调用 maintest() 将覆盖共享数据之前,无法保证 fun1() 会执行并读取其参数。

关于c++ - 在 pthread 中使用共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390772/

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