42 attr->detachstate = PTHREAD_CREATE_JOINABLE;
43 attr->schedpolicy = SCHED_RR;
44 attr->schedparam.sched_priority = LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO;
45 attr->inheritsched = PTHREAD_INHERIT_SCHED;
46 attr->scope = PTHREAD_SCOPE_PROCESS;
47 attr->stackaddr_set = 0;
48 attr->stackaddr = NULL;
49 attr->stacksize_set = 1;
50 attr->stacksize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
52#ifdef LOSCFG_KERNEL_SMP
53 attr->cpuset.__bits[0] = 0;
71 if ((attr != NULL) && ((detachState == PTHREAD_CREATE_JOINABLE) || (detachState == PTHREAD_CREATE_DETACHED))) {
72 attr->detachstate = (
UINT32)detachState;
81 if ((attr == NULL) || (detachState == NULL)) {
85 *detachState = (
int)attr->detachstate;
98 if (scope == PTHREAD_SCOPE_PROCESS) {
99 attr->scope = (
unsigned int)scope;
103 if (scope == PTHREAD_SCOPE_SYSTEM) {
112 if ((attr == NULL) || (scope == NULL)) {
116 *scope = (
int)attr->scope;
124 if ((attr != NULL) && ((inherit == PTHREAD_INHERIT_SCHED) || (inherit == PTHREAD_EXPLICIT_SCHED))) {
125 attr->inheritsched = (
UINT32)inherit;
134 if ((attr == NULL) || (inherit == NULL)) {
138 *inherit = (
int)attr->inheritsched;
145 if ((attr != NULL) && (policy == SCHED_RR)) {
146 attr->schedpolicy = SCHED_RR;
155 if ((attr == NULL) || (policy == NULL)) {
159 *policy = (
int)attr->schedpolicy;
166 if ((attr == NULL) || (param == NULL)) {
168 }
else if ((param->sched_priority < 0) || (param->sched_priority > OS_TASK_PRIORITY_LOWEST)) {
172 attr->schedparam = *param;
179 if ((attr == NULL) || (param == NULL)) {
183 *param = attr->schedparam;
200 attr->stackaddr_set = 1;
201 attr->stackaddr = stackAddr;
208 if (((attr != NULL) && (stackAddr != NULL)) && attr->stackaddr_set) {
209 *stackAddr = attr->stackaddr;
219 if ((attr == NULL) || (
stackSize < PTHREAD_STACK_MIN)) {
223 attr->stacksize_set = 1;
232 if ((attr == NULL) || (
stackSize == NULL) || (!attr->stacksize_set)) {
246#ifdef LOSCFG_KERNEL_SMP
251 if ((cpuset == NULL) || (cpusetsize == 0)) {
252 attr->cpuset.__bits[0] = 0;
256 if ((cpusetsize !=
sizeof(cpu_set_t)) || (cpuset->__bits[0] > LOSCFG_KERNEL_CPU_MASK)) {
260 attr->cpuset = *cpuset;
271#ifdef LOSCFG_KERNEL_SMP
272 if ((attr == NULL) || (cpuset == NULL) || (cpusetsize !=
sizeof(cpu_set_t))) {
276 *cpuset = attr->cpuset;
macro EXC_SP_SET stackSize
int pthread_attr_init(pthread_attr_t *attr)
int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit)
获取继承的调度策略
int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stackSize)
获取栈大小
int pthread_attr_getaffinity_np(const pthread_attr_t *attr, size_t cpusetsize, cpu_set_t *cpuset)
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stackSize)
设置栈大小
int pthread_attr_setscope(pthread_attr_t *attr, int scope)
设置线程的竞争范围(PTHREAD_SCOPE_SYSTEM 或 PTHREAD_SCOPE_PROCESS)。
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit)
设置继承的调度策略, PTHREAD_INHERIT_SCHED 表示新建的线程将继承创建者线程中定义的调度策略。
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachState)
获取分离状态
int pthread_attr_destroy(pthread_attr_t *attr)
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param)
设置线程属性对象的调度参数属性,调度参数是在 param 结构中定义的。仅支持优先级参数。新创建的线程使用此优先级运行。
int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackAddr)
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy)
设置调度策略,POSIX 标准指定 SCHED_FIFO(先入先出)、SCHED_RR(抢占)或 SCHED_OTHER(实现定义的方法)的调度策略属性。
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachState)
设置分离状态(分离和联合) 如果创建分离线程 (PTHREAD_CREATE_DETACHED),则该线程一退出,便可重用其线程 ID 和其他资源。
int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackAddr)
获取栈起始地址
int pthread_attr_getscope(const pthread_attr_t *attr, int *scope)
获取线程的竞争范围
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy)
获取调度策略
int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset)
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param)
获取线程属性对象的调度参数属性