当前位置: 首页 > news >正文

CentOS 使用线程库Pthread 库

1、Pthread 库说明

pthread 库是Linux系统默认线程库。

在Linux 系统环境中,编辑C/C++程序使用pthread 库,需要添加对应的头文件,并链接pthread库。

#include<pthread.h>

2、Pthread 库核心方法

pthread_create

函数定义:

int pthread_create(pthread_t* thread, const pthread_attr_t* attr, void*(*start_routine)(void*), void* arg);

参数说明: 

pthread_t 定义如下:

typedef unsigned long int pthread_t;

thread 是一个指向线程标识符的指针,线程调用后,改值被设置为线程ID

attr 用来设置线程属性

start_routine 是线程函数的其实地址,即线程函数体,线程创建成功后,thread 指向的内存单元从该地址开始运行

arg 是传递给线程函数体的参数

返回值:

若线程创建成功,则返回0,失败则返回错误码,并且 thread 内容是未定义的。

pthread_join

函数定义:

int pthread_join(pthread_t thread, void **retval);

参数说明: 

thread 是线程表示符

retval 用来获取线程的返回值,一般是 pthread_join 方法传递出来的值

功能说明:

这是一个线程阻塞函数,调用该函数则等到线程结束才继续运行

pthread_exit

函数定义:

void pthread_exit(void *retval);

参数说明: 

retval 是线程的退出码,传递给创建线程的地方

功能说明:

一个线程的结束有两种途径:

  • 线程函数体执行结束;
  • 调用 pthread_exit 方法退出线程;

pthread_self

函数定义:

pthread_t pthread_self();

功能说明:

用来获取当前线程ID

pthraad_detach

函数定义:

int pthread_detach (pthread_t __th)

功能说明:

分离线程

3、Pthread 库线程属性说明

线程属性 

设置线程不同属性有不同属性有不同的方法,但是都需要先初始化属性数据结构,初始化函数为:

int pthread_attr_init(pthread_attr_t *__attr);

线程属性包括:

  1. 作用域;
  2. 栈大小;
  3. 栈地址;
  4. 优先级;
  5. 分离状态;
  6. 调度策略;
  7. 调度参数;

 分离状态

线程终止时,系统将不再保留线程终止状态;当不需要线程的终止状态时,可以分离线程(调用 pthread_detach 函数),也可以通过设置线程的分离状态实现

int pthread_attr_getdetachstate(const pthread_attr_t* attr, int* state);
int pthread_attr_setdetachstate(pthread_attr_t* attr, int state);

state 的值可以是 PTHREAD_CREATE_DETACHED 和 PTHREAD_CREATE_JOINABLE,分别表示主线程阻塞和子线程剥离

线程优先级 

新线程的优先级默认为0

int  pthread_attr_getschedparam(const pthread_attr_t *restrict attr, struct sched_param *restrict param) ;
int pthread_attr_setschedparam(pthread_attr *restrict attr, const struct sched_param* restrict param);

继承父优先级 

新线程不继承父线程的调度优先级

调度策略

线程使用 SCHED_OTHER 调度策略,线程一旦开始运行,直到被强占或者直到线程阻塞或者停止位置

int pthread_attr_setschedpolicy(pthread_attr_t* attr, int policy);
int pthread_attr_setschedparam(pthread_attr_t* attr, struct sched_param* param)

4、Pthread 示例代码

前提:在/usr/local/source_code目录下新增thread_demo 目录,并在此目录下新建init_thread.cpp,文件内容如下:

#include <pthread.h>
#include <iostream>using namespace std;void* printHello(void* args) {cout << "Hello World from Thread" << endl;return NULL;
}int main() {pthread_t thread;if (pthread_create(&thread, NULL, &printHello, NULL)) {cout << "Error creating thread" << endl;return 1;}if (pthread_join(thread, NULL)) {cout << "Error joining thread" << endl;return 2;}return 0;
}

编译执行:

g++ init_thread.cpp -o init_thread  -L/usr/local/lib/ -lpthread

控制台输出:

[root@localhost thread_demo]# g++ init_thread.cpp -o init_thread  -L/usr/local/lib/ -lpthread
[root@localhost thread_demo]# ll
总用量 16
-rwxr-xr-x. 1 root root 9136 10月 24 14:44 init_thread
-rw-r--r--. 1 root root  459 10月 24 14:30 init_thread.cpp
[root@localhost thread_demo]# ./init_thread
Hello World from Thread

相关文章:

CentOS 使用线程库Pthread 库

1、Pthread 库说明 pthread 库是Linux系统默认线程库。 在Linux 系统环境中&#xff0c;编辑C/C程序使用pthread 库&#xff0c;需要添加对应的头文件&#xff0c;并链接pthread库。 #include<pthread.h> 2、Pthread 库核心方法 pthread_create 函数定义&#xff1…...

#力扣:LCP 01. 猜数字@FDDLC

LCP 01. 猜数字 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int game(int[] guess, int[] answer) {int cnt0;for(int i0;i<3;i){if(guess[i]answer[i])cnt;}return cnt;} }...

kafka丢数据的原因

目录 背景kafkaClient代码消息丢失的可能原因broker is downRD_KAFKA_MSG_SIZE_TOO_LARGE分区问题Kafka Broker的处理能力无法跟上&#xff0c;可能会出现以下情况 Some基础知识补充 背景 采用的client是librdkafka&#xff0c;在producerClient Send的数据时候发现会有数据丢…...

音视频编解码技术学习笔记

音视频编解码技术是音视频处理领域的重要部分&#xff0c;涉及到对原始音视频数据的压缩、编码和解码。以下是音视频编解码技术的一些要点和难点&#xff1a; 要点&#xff1a; 压缩技术 音视频编解码的核心是对原始音视频数据进行压缩&#xff0c;以减小文件大小和传输带宽…...

[C#基础训练]FoodRobot食品管理部分代码-1

代码参考: using System;namespace FoodRobotDemo { public class FoodRobot{private int[] foodCountArr;private string[] foodNameArr;public FoodRobot(){foodCountArr new int[3];foodNameArr new string[3] {"航天","航空","宇航" };}…...

YModem协议总结

《YModem协议总结》 目录 第1章 YModem协议简介 4 1.1 基本介绍 4 1.2 YModem基本介绍 4 第2章 YModem传输协议 5 2.1 起始帧的数据格式 5 2.2 数据帧的数据格式 5 2.3 结束帧数据结构 6 2.4 文件传输过程 6 2.5 CRC的计算 7 附录A 附录 8 A.1 附录 8 第1章 YModem协议简…...

ElasticSearch(ES)8.1及Kibana在docker环境下如何安装

ES基本信息介绍 Elasticsearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和分析引擎&#xff0c;最初由Elastic公司创建。它属于Elastic Stack&#xff08;ELK Stack&#xff09;的核心组件之一&#xff0c;用于实时地存储、检索和分析大量数据。 以下是Elastics…...

常用Win32 API的简单介绍

目录 前言&#xff1a; 控制控制台程序窗口的指令&#xff1a; system函数&#xff1a; COORD函数&#xff1a; GetStdHandle函数&#xff1a; GetConsoleCursorInfo函数&#xff1a; CONSOLE_CURSOR_INFO函数&#xff1a; SetConsoleCursorInfo函数&#xff1a; SetC…...

VM及WindowsServer安装

目录 一.操作系统的简介及常用的操作系统 二.windows的安装 安装VMWare虚拟机 注意点一 ​编辑 注意点二 三.安装配置Windows Server 2012 R2 四、虚拟机的环境配置及连接 1. 主机连接虚拟机 2. 虚拟机环境配置及共享 3. 环境配置 一.操作系统的简介及常用的操作系…...

操作系统【OS】调度算法对比图

FCFS SJF 高响应比 时间片轮转 多级反馈队列 可抢占&#xff1f; √ √ √ 队列内算法不一定 不可抢占&#xff1f; √ √ √ 队列内算法不一定 特点&优点 公平实现简单有利于长作业不利于短作业有利于CPU繁忙作业不利于IO繁忙作业 因为CPU繁忙型进程即…...

音视频开发常见问题(五):视频黑屏

摘要 本文介绍了视频黑屏的可能原因和解决方案。主要原因包括用户主动关闭视频、网络问题和渲染问题。解决方案包括优化网络稳定性、确保视频渲染视图设置正确、提供清晰的提示、实时监测网络质量、使用详细的日志系统、开启视频预览功能、使用视频流回调、处理编解码问题、处…...

力扣 第 368 场周赛

2908. 元素和最小的山形三元组 I 给你一个下标从 0 开始的整数数组 nums 。 如果下标三元组 (i, j, k) 满足下述全部条件&#xff0c;则认为它是一个 山形三元组 &#xff1a; i < j < k nums[i] < nums[j] 且 nums[k] < nums[j] 请你找出 nums 中 元素和最小 的…...

文件的常用操作(读取压缩文件、解压、删除)

背景&#xff1a;最近做一个腾讯 cos 桶 文件的读写与本地数据库查询等操作 Retrofit 中文件下载的可以添加 Streaming StreamingGETObservable<ResponseBody> downloadCosFile(Url String downloadUrl);Streaming 的作用&#xff1a; 注解通常用于指示Retrofit或其他HTT…...

Simulation Studio - TRNSYS

简单记录一下最近学习 Simulation Studio的一些经历。 在学习之初&#xff0c;参考了一些大佬们的文章&#xff1a; Fortran学习笔记——1.基本内容 - 知乎 但是我主要的目的是使用Simulation Studio&#xff08;下文用SS代替&#xff09;编译自己的组件&#xff0c;看到Sim…...

python实现串口通信

python实现串口通信是一件简单的事情&#xff0c;只要通过pyserial模块就可以实现。 一、串口通信 1、什么是串口通信&#xff1f; 串口通信是一种通过串行接口&#xff08;Serial Port&#xff09;进行数据传输的通信方式。在串口通信中&#xff0c;数据位按顺序一位一位地传…...

No module named ‘cv2’ 解决方法

目录 解决方案1解决方案2 解决方案1 一般情况下的解决方案 在自己的虚拟环境里面安装就行 pip install opencv-python解决方案2 但是我遇到的情况没有这么简单,我使用了pip list | grep open 搜索含有open字样的opencv的包,结果显示已经安装了 我直接进入我的自定义的虚拟…...

65、内网安全-域环境工作组局域网探针方案

目录 案例1-基本信息收集操作演示案例2-网络信息收集操作演示案例3-用户信息收集操作演示案例4-凭据信息收集操作演示案例5-探针主机域控架构服务操作演示涉及资源 我们攻击内网一般是借助web攻击&#xff0c;直接进去&#xff0c;然后再去攻击内网&#xff0c;那么攻击的对象一…...

C#:EXCEL列名、列序号之间互相转换

EXCEL的列名与列序号 之前的关系如下 A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26AA27AB28 /// <summary>/// 根据给的EXCEL列序号&#xff0c;得出列名字母/// </summary>/// <param name"iColNum">序号</param&…...

云原生微服务实战 Spring Cloud Alibaba 之 Nacos

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…...

ubuntu gcc版本降级 Reset gcc version from 11.3 to 11.2 on Ubuntu 22.04

aptitude 需要自己安装 sudo apt-get install aptitude # 安装# aptitude的一些常用的操作&#xff1a; sudo aptitude update # 更新软件源 sudo aptitude search 软件名称 # 查看软件 sudo aptitude install 软件名称 …...

C++的std--ranges算法自定义比较器与投影函数在排序中的组合使用

C20引入的std::ranges库为算法操作带来了更简洁、更安全的表达方式&#xff0c;其中自定义比较器与投影函数的组合使用尤其值得关注。这种组合不仅提升了代码的可读性&#xff0c;还能实现复杂的排序逻辑&#xff0c;让开发者能够更灵活地处理数据结构。本文将深入探讨这一特性…...

如何将Smart AM60电视盒子变身高性能Armbian服务器:完整实战指南

如何将Smart AM60电视盒子变身高性能Armbian服务器&#xff1a;完整实战指南 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l…...

Python3.10开发环境搭建指南:Miniconda镜像简化部署流程

Python3.10开发环境搭建指南&#xff1a;Miniconda镜像简化部署流程 1. 为什么选择Miniconda-Python3.10 Python作为当今最流行的编程语言之一&#xff0c;版本管理一直是开发者面临的挑战。Miniconda-Python3.10镜像提供了一种轻量级解决方案&#xff0c;它能帮你&#xff1…...

FLUX.1-dev入门指南:适合开发者和研究者的快速图像生成实验

FLUX.1-dev入门指南&#xff1a;适合开发者和研究者的快速图像生成实验 1. 为什么选择FLUX.1-dev进行图像生成实验 FLUX.1-dev是Black Forest Labs推出的开源AI图像生成模型&#xff0c;它代表了当前文生图技术的前沿水平。这个模型特别适合开发者和研究者使用&#xff0c;主…...

虚拟电厂之后,最先不够用的为什么是老一套功率预测和经营逻辑?

2026年开年&#xff0c;新能源圈最火的话题是什么&#xff1f;不是组件价格&#xff0c;不是储能成本&#xff0c;而是——虚拟电厂。1月初&#xff0c;江苏省发改委正式印发《关于促进我省虚拟电厂高质量发展的通知》&#xff0c;同步公布全省首批100个虚拟电厂建设项目清单。…...

从安装到调优:SenseVoiceSmall语音情感识别完整使用指南

从安装到调优&#xff1a;SenseVoiceSmall语音情感识别完整使用指南 1. 引言&#xff1a;为什么选择SenseVoiceSmall&#xff1f; 语音识别技术已经发展到了不仅能听懂我们在说什么&#xff0c;还能感知我们说话时的情绪状态。SenseVoiceSmall作为阿里巴巴达摩院开源的语音理…...

GitHub中文界面插件:3步告别英文困扰,让中文开发者效率翻倍

GitHub中文界面插件&#xff1a;3步告别英文困扰&#xff0c;让中文开发者效率翻倍 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你…...

ComfyUI-VideoHelperSuite:构建高性能视频处理管道的异步架构设计

ComfyUI-VideoHelperSuite&#xff1a;构建高性能视频处理管道的异步架构设计 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite ComfyUI-VideoHelperSuite是一个专门…...

大创管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着高等教育改革的不断深入&#xff0c;大学生创新创业训练计划&#xff08;简称“大创”&#xff09;已成为培养创新型人才的重要途径。传统的大创项目管理多依赖手工操作或简单的电子表格&#xff0c;存在效率低下、数据易丢失、协作困难等问题。为提升大创项目管理的科…...

Qwen3-VL-8B在智能客服场景的应用:让客服真正看懂用户图片

Qwen3-VL-8B在智能客服场景的应用&#xff1a;让客服真正看懂用户图片 1. 智能客服的视觉盲区 你有没有遇到过这样的情况&#xff1a;当用户给客服发送一张商品照片询问"这个配件能用在XX型号上吗&#xff1f;"&#xff0c;得到的回复却是"请您提供商品编号&q…...