pthread_suspend_np , pthread_unsuspend_np 和 pthread_continue_np 子例程

用途

暂挂 并恢复 执行由 thread指定的 pthread。

线程库 (libpthreads.a)

语法

#include <pthread.h>

pthread_t thread;
int pthread_suspend_np(thread)
int pthread_unsuspend_np (thread);
int pthread_continue_np(thread);

描述

pthread_suspend_np 子例程立即暂挂执行由 thread指定的 pthread。 从 pthread_suspend_np成功返回时,不再执行暂挂的 pthread。 如果对已暂挂的 pthread 调用 pthread_suspend_np ,那么 pthread 保持不变,并且 pthread_suspend_np 返回成功。

如果将 pthread_suspend_np 与以下 pthread 函数配合使用,那么会发生死锁。

pthread_getrusage_np
pthread_cancel
pthread_detach
pthread_join
pthread_getunique_np
pthread_join_np
pthread_setschedparam
pthread_getschedparam
pthread_kill
要防止死锁,应设置 PTHREAD_SUSPENDIBLE=ON。

pthread_unsuspend_np 例程会减少暂挂计数,一旦计数为零,该例程将恢复执行暂挂的 pthread。 如果对未暂挂的 pthread 调用 pthread_unsuspend_np ,那么 pthread 保持不变,并且 pthread_unsuspend_np 返回成功。

pthread_continue_np 例程清除暂挂计数并恢复执行暂挂的 pthread。 如果对未暂挂的 pthread 调用 pthread_continue_np ,那么 pthread 保持不变,并且 pthread_continue_np 返回成功。

暂挂的 pthread 不会被信号唤醒。 该信号将保持暂挂状态,直到 pthread_continue_np恢复执行 pthread 为止。

注: 使用 pthread_suspend_np 仅应由高级用户使用,因为不正确使用此子命令可能会导致应用程序死锁,或者目标线程可能暂挂应用程序锁定。

参数

描述
线程 指定目标线程。

返回值

成功时返回零。 非零值指示错误。

错误代码

如果发生以下任何情况,那么 pthread_suspend_nppthread_unsuspend_nppthread_continue_np 将失败并返回相应的值:

描述
ESRCH 在当前进程中找不到由 thread 属性指定的目标线程。