侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

pthread_attr_setscope函数用法详解

noerror
2022-10-04 / 0 评论 / 0 点赞 / 202 阅读 / 713 字 / 正在检测是否收录...

pthread_attr_setscope函数用法详解

pthread_attr_setscope函数简介

  • 头文件包含
#include <pthread.h>
  • 函数定义
int pthread_attr_setscope(pthread_attr_t * attr \
int pthread_attr_getscope(const pthread_attr_t * attr \
  • 编译链接选项
-pthread

pthread_attr_setscope函数常见使用错误

  • 链接错误
    undefined reference to `pthread_attr_setscope'
    解决办法:添加链接选项
-pthread
  • 编译错误
    warning: implicit declaration of function ‘pthread_attr_setscope’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <pthread.h>

pthread_attr_setscope函数详细描述

pthread_attr_setscope ()函数将attr引用的thread attributes对象的争用范围属性设置为scope 中指定的值。争用范围属性定义了线程与之竞争资源(如CPU)的线程集。POSIX.1为scope :指定了两个可能的值

  • PTHREAD_SCOPE_SYSTEM 线程与系统上位于同一调度分配域(一个或多个处理器的组)中的所有进程中的所有其他线程竞争资源。 PTHREAD_SCOPE_SYSTEM 线程根据它们的调度策略和优先级相对于彼此进行调度。
  • PTHREAD_SCOPE_PROCESS 该线程与同一进程中的所有其他线程竞争资源,这些线程也是在PTHREAD_SCOPE_PROCESS争用范围内创建的。PTHREAD_SCOPE_PROCESS线程根据其调度策略和优先级相对于进程中的其他线程进行调度。POSIX.1没有指定这些线程如何与系统上其他进程中的其他线程或与使用 PTHREAD_SCOPE_SYSTEM 争用范围创建的同一进程中的其他线程争用。

POSIX.1要求实现至少支持其中一个争用范围。Linux支持PTHREAD_SCOPE_SYSTEM 但不支持PTHREAD_SCOPE_PROCESS
在支持多个争用范围的系统上,为了使pthread_attr_setscope ()进行的参数设置在调用pthread_create (3)时生效,调用方必须使用pthread_attr_setinheritsched (3)将属性对象attr的inherity-scheduler属性设置为PTHREAD_EXPLICIT_SCHED
pthread_attr_getscope ()函数返回attr在scope 指向的缓冲区中引用的thread attributes对象的争用范围属性

pthread_attr_setscope函数返回值

如果成功,这些函数返回0;错误时,它们返回一个非零错误号。

pthread_attr_setscope函数错误码

pthread_attr_setscope ()可能会失败,出现以下错误:

  • EINVAL 在scope 中指定了无效值
  • ENOTSUP scope指定的值PTHREAD_SCOPE_PROCESS 在Linux上不受支持。

pthread_attr_setscope函数其他说明

PTHREAD_SCOPE_SYSTEM 争用范围通常指示用户空间线程直接绑定到单个内核调度实体。在Linux上,过时的LinuxThreads实现和现代的NPTL实现就是这种情况,它们都是1:1线程实现。
POSIX.1指定默认争用范围是由实现定义的。

0

评论区