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);
线程属性包括:
- 作用域;
- 栈大小;
- 栈地址;
- 优先级;
- 分离状态;
- 调度策略;
- 调度参数;
分离状态
线程终止时,系统将不再保留线程终止状态;当不需要线程的终止状态时,可以分离线程(调用 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 系统环境中,编辑C/C程序使用pthread 库,需要添加对应的头文件,并链接pthread库。 #include<pthread.h> 2、Pthread 库核心方法 pthread_create 函数定义࿱…...
#力扣:LCP 01. 猜数字@FDDLC
LCP 01. 猜数字 - 力扣(LeetCode) 一、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的处理能力无法跟上,可能会出现以下情况 Some基础知识补充 背景 采用的client是librdkafka,在producerClient Send的数据时候发现会有数据丢…...
音视频编解码技术学习笔记
音视频编解码技术是音视频处理领域的重要部分,涉及到对原始音视频数据的压缩、编码和解码。以下是音视频编解码技术的一些要点和难点: 要点: 压缩技术 音视频编解码的核心是对原始音视频数据进行压缩,以减小文件大小和传输带宽…...
[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(简称ES)是一个开源的分布式搜索和分析引擎,最初由Elastic公司创建。它属于Elastic Stack(ELK Stack)的核心组件之一,用于实时地存储、检索和分析大量数据。 以下是Elastics…...

常用Win32 API的简单介绍
目录 前言: 控制控制台程序窗口的指令: system函数: COORD函数: GetStdHandle函数: GetConsoleCursorInfo函数: CONSOLE_CURSOR_INFO函数: SetConsoleCursorInfo函数: SetC…...

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

操作系统【OS】调度算法对比图
FCFS SJF 高响应比 时间片轮转 多级反馈队列 可抢占? √ √ √ 队列内算法不一定 不可抢占? √ √ √ 队列内算法不一定 特点&优点 公平实现简单有利于长作业不利于短作业有利于CPU繁忙作业不利于IO繁忙作业 因为CPU繁忙型进程即…...
音视频开发常见问题(五):视频黑屏
摘要 本文介绍了视频黑屏的可能原因和解决方案。主要原因包括用户主动关闭视频、网络问题和渲染问题。解决方案包括优化网络稳定性、确保视频渲染视图设置正确、提供清晰的提示、实时监测网络质量、使用详细的日志系统、开启视频预览功能、使用视频流回调、处理编解码问题、处…...
力扣 第 368 场周赛
2908. 元素和最小的山形三元组 I 给你一个下标从 0 开始的整数数组 nums 。 如果下标三元组 (i, j, k) 满足下述全部条件,则认为它是一个 山形三元组 : i < j < k nums[i] < nums[j] 且 nums[k] < nums[j] 请你找出 nums 中 元素和最小 的…...
文件的常用操作(读取压缩文件、解压、删除)
背景:最近做一个腾讯 cos 桶 文件的读写与本地数据库查询等操作 Retrofit 中文件下载的可以添加 Streaming StreamingGETObservable<ResponseBody> downloadCosFile(Url String downloadUrl);Streaming 的作用: 注解通常用于指示Retrofit或其他HTT…...
Simulation Studio - TRNSYS
简单记录一下最近学习 Simulation Studio的一些经历。 在学习之初,参考了一些大佬们的文章: Fortran学习笔记——1.基本内容 - 知乎 但是我主要的目的是使用Simulation Studio(下文用SS代替)编译自己的组件,看到Sim…...
python实现串口通信
python实现串口通信是一件简单的事情,只要通过pyserial模块就可以实现。 一、串口通信 1、什么是串口通信? 串口通信是一种通过串行接口(Serial Port)进行数据传输的通信方式。在串口通信中,数据位按顺序一位一位地传…...

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攻击,直接进去,然后再去攻击内网,那么攻击的对象一…...
C#:EXCEL列名、列序号之间互相转换
EXCEL的列名与列序号 之前的关系如下 A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26AA27AB28 /// <summary>/// 根据给的EXCEL列序号,得出列名字母/// </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的一些常用的操作: sudo aptitude update # 更新软件源 sudo aptitude search 软件名称 # 查看软件 sudo aptitude install 软件名称 …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...