在 pthread 中使用共享变量



在下面的示例代码中,我使用共享变量将信息传递给线程。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()并读取其参数将覆盖共享数据。

最新更新