c - 同步线程 - C

标签 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 代码。我不知道如何同步读写线程。

最佳答案

这可能取决于代码运行的环境。如果要在Windows上运行,可以使用Semaphore或Mutex等线程同步对象,WIn32API提供了这样的函数来创建、控制和释放,例如: CreateSemaphore、CreateMutex。

如果要在Unix环境上运行,您可以使用posix支持的同步对象,例如pthread_mutex_ 或 pthread_semaphore ..这些的用法都有很好的文档记录,因此您可以在不满足竞争条件的情况下编写代码。

关于c - 同步线程 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707122/

相关文章:

c++ - MPI 发送和接收结构的结构

c - V7 Echo 程序递增一个常量指针,如何?

java CyclicBarrier 不会因重置而损坏

c# - 线程引发事件被处理程序阻止?

c++ - 如何在循环线程中使用 wait_for?

Android线程 - 在执行所有其他线程之前执行一个线程

与加速度计接口(interface)时的 C 段错误

c - 嵌入式系统中的启动代码流程,引导加载程序的概念?

c - 我想在结构中添加一些值

python异步线程异常处理