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_cancel
pthread_detach
pthread_join
pthread_getunique_np
pthread_join_np
pthread_setschedparam
pthread_getschedparam
pthread_kill
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_np, pthread_unsuspend_np 和 pthread_continue_np 将失败并返回相应的值:
| 项 | 描述 |
|---|---|
| ESRCH | 在当前进程中找不到由 thread 属性指定的目标线程。 |