【发布时间】:2014-07-31 14:22:53
【问题描述】:
如何在 C++ 中解除读取 Linux 系统调用的阻塞?例如,如果我在一个线程中有以下循环 :
bool shouldRun;
void foo(){
while(shouldRun){
length = read( file_descriptor, buffer, buffer_length);
//do something
}
return;
}
main(){
shouldRun = true;
std::thread myThread(foo);
//do some other stuff
shouldRun = false;
//-->here I want to unblock "read" in foo
}
一般read方法应该阻塞,我只想在需要的时候解除阻塞。
【问题讨论】:
-
如何中止任何函数调用?
-
@dandan78 我不明白你的评论。请澄清。编辑:我同意,在这里取消阻止可能是一个更好的分类法。
-
从另一个线程关闭文件描述符?
-
您可以
pthread_kill()线程,前提是您在线程中正确配置了给定的信号。因此对read()的调用将返回错误EINTR。
标签: c++ linux system-calls