POSIX线程被"暂停"是什么意思?

Joh*_*ger 8 c posix language-lawyer

在对最近一个问题的评论过程中,出现了一个附属问题,即在什么时候PTHREAD_CANCEL_DEFERRED可以预期对具有可取消性的pthreads线程的取消请求采取行动.随后提到了标准和一些律师.我并不太关心我在这个问题的评论中是否错了,但我想确定我正确理解POSIX的规定.

标准中最相关的部分说

每当线程启用了可取消性并且已经以该线程作为目标取消请求,然后线程调用任何作为取消点的函数时,取消请求将在函数返回之前被执行.如果线程已启用可取消性并且在线程作为目标进行取消请求,而线程在取消点处被挂起,则线程应被唤醒并且应取消取消请求.

但是,线程被"暂停"是什么意思呢?POSIX明确定义了进程的术语,但就我所知,对于线程没有明确定义.另一方面,POSIX将线程暂停作为少数函数的行为之一,包括但不限于与同步对象相关的一些函数.是否应该得出结论认为那些集体作为该术语的相关定义?

而作为这一切都涉及到因为POSIX不指定线程挂起作为行为的一部分催生了这一调查线索的问题,read(),fread()或任何一般的文件或流I/O功能,如果一个线程是赚不到由于I/O被阻止而导致进展,这是否意味着为了取消而被"暂停"?

Cla*_*ris 1

read、fread 和friends 是系统调用,因此它们将执行上下文切换并从内核上下文执行,直到这些函数完成。中断内核上下文超出了 pthread 的范围,因此它们不会导致取消。

我没有它的参考,但据我所知,Posix 线程上下文中的线程挂起与其同步对象(如 futex 的)有关。