我有一个使用 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/