在下面的示例代码中,我使用共享变量将信息传递给线程。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::thread
和std::mutex
?
2(不,代码不正确。无法保证在第二次调用maintest()
之前执行fun1()
并读取其参数将覆盖共享数据。