jos*_*ose 6 c++ io serial-port nonblocking blocking
每当我需要发送消息时,我都会从线程调用这个函数 _write_port() 。为了确保写入整个消息,使用 tcdrain()。
void Serial_Port::_write_port(char *buf, unsigned &len)
{
// Lock
pthread_mutex_lock(&lock);
// Write packet via serial link
write(fd, buf, len);
// Wait until all data has been written
tcdrain(fd);
// Unlock
pthread_mutex_unlock(&lock);
return;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 tcdrain() 在执行随机次数的函数 _write_port() 后永远阻塞。这将阻塞锁,导致阻塞我的其他读取线程,从而阻塞所有内容。
避免 tcdrain 永远阻塞的好方法是什么?
注意:我奇怪地注意到,如果我在整个函数中使用多个 printf(),tcdrain 永远不会阻塞。printf() 和 write() 之间存在关系对我来说没有任何意义,因为它们写入不同的输出文件。由于我无法解释这种行为,我认为它在我的实验中如此工作可能是巧合。如果有人可以解释这种行为,请告诉我。