同步线程 - C.

时间:2016-01-10 15:23:52

标签: c multithreading

我有一个使用C代码的C ++包装器类。 reading_function正在一个线程中运行,该函数仅在write_is_finished时返回。写入新段时,此函数应读取数据。当新细分可用时,会调用writing_function。所以,我的目标是做写 - 读 - 写等。为了实现这一点,我使用无限循环,使用if else语句(伪代码):

int reading_function([parameters]){
//....
for(;;){
   sleep(_few_ms);
   if(is_writing == false){
      is_reading == true;
      //..read
      is_reading == false;
   }
   if(write_is_finished == true){
      return check_state;
   }
  }
}

int writing_function([parameters]){
//...
for(;;){
   sleep(_few_ms-2);
     if(is_reading == false){
       is_writing = true;
       //...write
       is_writing = false;
     }
    return check_state;
  }
}

该计划运行良好。但我想要一个更优雅的解决方案。因为这是C代码,从C ++类调用。我不知道如何同步读写线程。

1 个答案:

答案 0 :(得分:1)

可能取决于代码运行的环境。如果它将在Windows上运行,您可以使用线程同步对象,如Semaphore或Mutex,WIn32API提供此类功能来创建,控制和释放,例如, CreateSemaphore,CreateMutex。

如果它将在Unix环境中运行,您可以使用posix支持的同步对象,例如pthread_mutex_或pthread_semaphore ..这些内容的使用情况非常详细,因此您可以在不满足竞争条件的情况下编写代码。