PR_Interrupt¶
设置目标线程的中断请求。
语法¶
#include <prthread.h>
PRStatus PR_Interrupt(PRThread *thread);
参数¶
PR_Interrupt 具有以下参数
thread
要设置中断请求的线程。
返回值¶
该函数返回以下值之一
如果指定的线程当前处于阻塞状态,则返回
PR_SUCCESS
。否则,返回
PR_FAILURE
。
描述¶
PR_Interrupt 的目的是请求正在执行某个任务的线程停止当前操作并返回到某个控制点。假设在执行中断的线程和被中断的线程之间已经协商好了一个控制点。当被中断的线程到达预先安排的点时,它可以与其对等线程通信以发现计划更改的真正原因。
中断请求保留在线程的状态中,直到它被精确地传递一次或显式取消。被中断的线程返回 PR_FAILURE
(-1) 并带有错误代码(参见 PR_GetError),用于返回 PRStatus 的阻塞操作(例如 I/O 操作、监视器等待或等待条件)。若要检查线程是否被中断,请将 PR_GetError 的结果与 PR_PENDING_INTERRUPT_ERROR
进行比较。
如果目标线程无效,则 PR_Interrupt 本身可能会失败。
Bug¶
PR_Interrupt 存在以下限制和已知 Bug
线程从阻塞 I/O 函数中被中断可能存在延迟。在所有 NSPR 实现中,最大延迟最多为五秒。在基于 pthreads 的 Unix 实现中,最大延迟为 0.1 秒。
文件 I/O 被认为是即时的,因此文件 I/O 函数无法被中断。不幸的是,标准输入、输出和错误流被 NSPR 视为文件,因此在
PR_STDIN
上的 PR_Read 调用即使可能无限期阻塞也无法被中断。在 NT 实现中,PR_Connect 无法被中断。
在 NT 实现中,文件描述符不可用,并且必须在中断文件描述符上的 I/O 函数后关闭。