C语言多线程编程-线程属性和优先级

概念介绍

在C语言中进行多线程编程,通常会使用POSIX线程(也称为Pthreads)库,这是在Unix-like系统中实现多线程的标准方法。在Windows系统中,会使用Windows API来进行多线程编程。注意,C语言标准库本身并不直接支持多线程,而是通过这些平台特定的库来提供支持。

关于线程的属性和优先级,这里有一些基本的概念:

  1. 线程属性(Thread Attributes):

    • 线程属性是用来设置新创建的线程的一些特性。例如,你可以设置线程是否是分离的(detached),或者设置线程的堆栈大小等。
    • 在Pthreads中,你可以使用pthread_attr_t类型的变量来设置和获取线程属性,通过pthread_attr_init初始化属性对象,pthread_attr_setdetachstate设置线程的分离状态,pthread_attr_setstacksize设置线程的堆栈大小等。
    • 设置完属性后,可以使用pthread_create函数来创建具有这些属性的线程。
  2. 线程优先级(Thread Priority):

    • 线程优先级决定了当多个线程同时处于可执行状态时,哪个线程应该优先得到执行。优先级较高的线程通常会得到更多的执行时间。
    • 在Pthreads中,并没有直接设置线程优先级的跨平台方法,因为线程调度和优先级管理通常是操作系统相关的。不过,在某些平台上,你可以使用sched_setschedulersched_getscheduler函数来设置和获取线程的调度策略和优先级。
    • 在Windows中,你可以使用SetThreadPriority函数来设置线程的优先级。

关键操作说明

现在就以通过POSIX线程(POSIX Threads,通常简称为pthreads)接口来实现多线程编程。说明设置线程的属性和优先级的相关操作,可以使用pthread_attr_t结构体以及相关函数。

线程属性设置

  1. 初始化线程属性:

    pthread_attr_t attr;
    pthread_attr_init(&attr);
    
  2. 设置线程调度策略和优先级参数(如果系统支持):

    • 调度策略:可以通过 pthread_attr_setschedpolicy() 函数设置线程的调度策略,如SCHED_FIFO(先入先出)、SCHED_RR(轮转调度)等。
    • 优先级:首先需要获取当前系统的调度参数范围,然后设置线程的优先级,这通常涉及到两个步骤:
      struct sched_param param;
      int policy;
      int max_priority;// 获取当前系统的最大优先级
      pthread_getschedparam(pthread_self(), &policy, &param);
      max_priority = sched_get_priority_max(policy);// 设置线程优先级,假设设置为max_priority的一半
      param.sched_priority = max_priority / 2;
      pthread_attr_setschedparam(&attr, &param);
      
  3. 创建线程时应用这些属性:

    pthread_t thread_id;
    if (pthread_create(&thread_id, &attr, thread_function, NULL) != 0) {// 错误处理
    }
    
  4. 在完成创建线程后,别忘了清理线程属性:

    pthread_attr_destroy(&attr);
    

总结

不是所有的操作系统都支持设置线程的优先级,或者优先级的实际影响可能取决于特定的操作系统调度策略。在某些系统上,即使设置了优先级,也不能保证高优先级线程总是比低优先级线程获得更多CPU时间片。因此,在设计多线程程序时,应谨慎依赖线程优先级,并确保程序逻辑不会因优先级调整而失效。同时线程优先级和调度是一个复杂的主题,不同的操作系统和平台可能会有不同的行为和限制。在设置线程优先级时,需要仔细考虑你的应用需求和目标平台的特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型占显存的计算和优化

可以优化的地方: per_device_train_batch_size(相当于batch size,越小显存占的越小) gradient_accumulation_steps(per_device_train_batch_size*gradient_accumulation_steps计算梯度的数据数) gradien…

test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍

测试覆盖率 测试覆盖率(test coverage)是衡量软件测试完整性的一个重要指标。掌握测试覆盖率数据,有利于客观认识软件质量,正确了解测试状态,有效改进测试工作。 当然,要发挥这些作用,前提是我们掌握了真实的测试覆盖…

计算机毕业设计 基于Java的供应商管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

yolov1, yolo v2 和yolo v3系列分析

目标检测模型主要分为two-stage和one-stage, one-stage的代表主要是yolo系列和ssd。简单记录下学习yolo系列的笔记。 1 yolo V1 yolo v1是2015年的论文 you only look once:unified,real-time object detection 中提出,为one-st…

BUUCTF--hitcontraining_heapcreator1

老规矩上来看保护: 64位架构并且除了PIE全开。接着黑盒测试下场景: 菜单题不用想就是堆。接着我们我们看看IDA中的逻辑: 程序的主要逻辑是增删改查。我们看看创建堆的过程: 注释我已给出,步骤大概如下: 1.…

尚硅谷大数据技术-数据湖Hudi视频教程-笔记01【概述、编译安装】

大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…

基于单片机的智能衣柜设计

一、摘要 随着科技的不断发展,人们对于生活品质的要求越来越高。智能衣柜作为智能家居的一个重要组成部分,能够为用户提供便捷、个性化的衣物管理服务。本文主要研究了基于单片机的智能衣柜设计,通过对硬件系统和软件系统的设计与实现&#…

【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战

🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS …

CentOs搭建Kafka集群

Centos7搭建Kafka集群 一、集群规划二、环境准备三、安装kafka集群1、下载kafka安装包2、解压3、配置环境变量4、编辑配置文件①修改broker.id②配置kafka运行日志路径③配置Zookeeper集群地址 5、启动集群6、测试kafka①、创建topic②、查看当前服务器中的所有topic③、生产者…

如何使用CapSolver解决Web爬虫中遇到的CAPTCHA问题

Web爬取是一种强大的技术,用于从网站中提取数据,但经常会遇到一个常见障碍,即CAPTCHA。CAPTCHA是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写,旨在防止自动机器人访问网站。然而&…

月薪15000在春晚分会场西安,够花吗?

千寻的结论: 如果有房无贷,另一半也有工作收入,父母身体健康且均有不错的退休金, 满足这些条件的话,在西安月入1.5W是相当不错。

人机交互主板定制_基于MT8735安卓核心板的自助查询机方案

人机交互主板是一种商显智能终端主板,广泛应用于广告机、工控一体机、教学一体机、智能自助终端、考勤机、智能零售终端、O2O智能设备、取号机、计算机视觉、医疗健康设备、机器人设备等领域。 人机交互主板采用联发科MTK8735芯片平台,四核Cortex-A53架构…

年度总结丨酷雷曼2023年度记忆

2023年 我们关心粮食和蔬菜 也关心“视界”和未来 我们执着于向新兴科技深处钻研 也探寻着让VR全景广泛落地 我们目睹着智慧生活的日新月异 也记录着平凡奋斗者们创造的非凡事业 2024年 属于VR的盛行之年 你又会将目光投向哪里? 这里有一份来自 酷雷曼的…

Video组件的使用

概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能,媒体组件都是必不可少的。以视频功能为例&a…

服务网格 Service Mesh

什么是服务网格? 服务网格是一个软件层,用于处理应用程序中服务之间的所有通信。该层由容器化微服务组成。随着应用程序的扩展和微服务数量的增加,监控服务的性能变得越来越困难。为了管理服务之间的连接,服务网格提供了监控、记…

promethues grafana 安装和使用

文章目录 1、promethues安装2、node-exporter安装3、grafana安装4、配置promethues监控node节点5、grafana操作外传 Docker 镜像下载地址: https://hub.docker.com 比较好的hub.docker.com///-- https://hub.docker.com/u/bitnami grafana监控面板:https…

excel中解决多行文本自动调整行高后打印预览还是显示不全情况

注意:此方法对于多行合并后单元格行高调整不适用,需要手动调整,如大家有简便方法,欢迎评论。 一、调整表格为自动调整行高 1)点击此处全选表格 2)在第一行序号单元格的下端,鼠标成黑十字时&am…

leetcode2397. 被列覆盖的最多行数

目录 题目 思路 解题方法 题目 https://leetcode.cn/problems/maximum-rows-covered-by-columns/description/ 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 列的数量。 …

Ubuntu18.04 升级Ubuntu20.04

文章目录 背景升级方法遇到的问题 背景 因项目环境需要,欲将Ubuntu18.04升级至Ubuntu20.04,参考网上其他小伙伴的方法,也遇到了一个问题,特此记录一下,希望能帮助其他有同样问题的小伙伴。 升级方法 参考&#xff1a…

Android studio VideoView 应用设计

一、运行效果: 二、新建empty activity项目: 三、打开activity_main.xml布局文件,添加VideoView: <VideoViewandroid:id="@+id/videoView"android:layout_width="368dp"android:layout_height="573dp"app:layout_constraintBottom_toBot…