thread_post_many 子例程

用途

发布事件完成的一个或多个线程。

标准 C 库 (libc.a)

语法

#include <sys/thread.h>

int thread_post_many( nthreads, tidp, erridp)
int nthreads;
tid_t * tidp;
tid_t * erridp;

描述

thread_post_many 子例程发布事件发生时的一个或多个线程。 要发布的线程数由 nthreads 参数的值指定,而 提德普 参数则指向需要发布的线程的线程标识数组。 该子例程就像 thread_post 子例程一样工作,但可以用于同时发布到多个线程。

在对 thread_post_many 子例程的一次调用中最多可以发布 512 个线程。

可以在 埃里德普 参数中传递一个线程标识字段的可选地址。 除非子例程失败,否则内核通常会忽略此字段,因为调用进程没有向任何一个指定线程发布的许可权。 在此情况下,内核会将 提德普 参数指向的阵列中的所有线程发布到第一个发生故障的线程,并使用发生故障的线程的标识填充 埃里德普 参数。

参数

描述
nthreads 指定要发布的线程的数目。
提德普 指定对应于要发布的线程列表的线程标识数组的地址。
埃里德普 为 NULL 或指定指向线程标识变量的指针,在此变量中,当设置了 EPERM错误号 时,内核将返回第一个失败线程的线程标识。

返回值

在成功完成时, thread_post_many 子例程返回值 0。 如果不成功,那么将返回值 -1 ,并将全局变量 错误号 设置为指示错误。

错误代码

当下列其中一项为 true 时, thread_post_many 子例程不成功:
描述
ESRCH 指示的线程都不存在,或者它们都已退出或正在退出。
EPERM 真实或有效的用户标识与正在发布的一个或多个线程的真实或有效用户标识不匹配,否则调用进程没有 root 用户权限。
EFAULT 提德普 参数指向进程的地址空间以外的位置。
EINVAL nthreads 参数中指定的值为负值或大于 512 的值。