我有一个使用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 ++类调用。我不知道如何同步读写线程。
答案 0 :(得分:1)
可能取决于代码运行的环境。如果它将在Windows上运行,您可以使用线程同步对象,如Semaphore或Mutex,WIn32API提供此类功能来创建,控制和释放,例如, CreateSemaphore,CreateMutex。
如果它将在Unix环境中运行,您可以使用posix支持的同步对象,例如pthread_mutex_或pthread_semaphore ..这些内容的使用情况非常详细,因此您可以在不满足竞争条件的情况下编写代码。