Linux多线程编程- pthread_self()
pthread_self() 函数是 POSIX 线程库的一部分,它提供了一个非常简单的功能:获取当前线程的唯一标识符。这个标识符是 pthread_t 类型的,通常是一个无符号的长整型值,不过具体的类型是由实现定义的,这意味着它可以在不同的操作系统上有不同的表示。
这个标识符对于调试多线程程序非常有用,因为可以以此来区分哪个线程正在执行。此外,pthread_self() 在实现线程的同步操作时也很有用,例如,在一个线程中设置一个锁,并且只允许拥有这个锁的线程来释放它。
pthread_self() 函数的原型如下:
#include <pthread.h>pthread_t pthread_self(void);
当我们调用这个函数时,它将返回当前线程的 pthread_t 标识符。该函数不接受任何参数,并且总是成功的,因此它没有返回错误代码。
在多线程程序中,每个线程都可以通过调用 pthread_self() 来获取自己的线程ID。线程ID可以用于比较操作,以判断两个线程ID是否相同。
下面是 pthread_self() 函数的一个简单示例:
#include <stdio.h>
#include <pthread.h>// 线程函数
void *thread_func(void *arg) {int num = (int)arg;pthread_t tid = pthread_self();printf("Thread %d ID: %ld\n", num, (long)tid);pthread_exit(0);
}int main() {pthread_t thread1, thread2;// 创建两个线程pthread_create(&thread1, NULL, thread_func, (void *)1);pthread_create(&thread2, NULL, thread_func, (void *)2);// 等待线程结束pthread_join(thread1, NULL);pthread_join(thread2, NULL);return 0;
}
程序运行结果如下:
$ ./pthread_self
Thread 1 ID: 139809461679680
Thread 2 ID: 139809453286976
在上面的程序中,每个线程打印出它的线程ID。尽管 pthread_create 函数调用返回的 pthread_t 变量可以用来识别线程,但是在线程的执行函数内部,pthread_self() 是识别执行线程的推荐方式。
相关文章:
Linux多线程编程- pthread_self()
pthread_self() 函数是 POSIX 线程库的一部分,它提供了一个非常简单的功能:获取当前线程的唯一标识符。这个标识符是 pthread_t 类型的,通常是一个无符号的长整型值,不过具体的类型是由实现定义的,这意味着它可以在不同…...
APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践
一分钟精华速览 分布式链路追踪系统在企业的APM体系中扮演着重要的角色。本文分享了去哪儿旅行构建分布式链路追踪系统的实践经验。从APM整体架构设计入手,讲述了日志收集、Kafka传输和Flink任务处理等环节的性能优化实践和踩坑经验。 同时,作者结合丰…...
ASTM F963-23美国玩具安全新标准发布
新标准发布 2023年10月13日,美国材料与试验协会(ASTM)发布了新版玩具安全标准ASTM F963-23。 主要更新内容 与ASTM F963-17相比,此次更新包括:单独描述了基材重金属元素的豁免情况,更新了邻苯二甲酸酯的管控…...
swift语言下SurfGen库做的爬虫是什么样的 ?
Swift语言并没有内置的爬虫库,但是你可以使用第三方库来实现爬虫功能。其中比较常用的是Alamofire和SwiftyJSON。Alamofire是一个基于Swift语言的HTTP网络库,可以用来发送HTTP请求和接收HTTP响应。而SwiftyJSON则是一个用于处理JSON数据的Swift库&#x…...
Vue纯CSS实现掷色子
效果图: 实现代码 直接利用CSS3动画实现的效果,无js代码。 <template><div class"wrap"><input type"checkbox" id"roll"><label for"roll"><div class"content"><…...
使用vscode开发uniapp项目常用的辅助插件,提升开发效率
为什么不使用hbuilder开发呢?因为hbuilder对ts和vue3语法支持并不友好,而且代码提示不智能,也不能使用最近很流行的coplit和CodeGeex智能提示,所以就换掉hbulider,使用我们熟悉的vscode开发吧。 第一个:un…...
python脚本监听域名证书过期时间,并将通知消息到钉钉
版本一: 执行脚本带上 --dingtalk-webhook和–domains后指定钉钉token和域名 python3 ssl_spirtime.py --dingtalk-webhook https://oapi.dingtalk.com/robot/send?access_tokenavd345324 --domains www.abc1.com www.abc2.com www.abc3.com脚本如下 #!/usr/bin…...
那些看起来高大上的封装函数
什么 ToGray 只支持3通道图像, 让我看看怎么个事 就这么生硬的加了个判断 好家伙 调用了下opencv ,通道数都不判断一下...
go语言 | grpc原理介绍(三)
了解 gRPC 通信模式中的消息流 gRPC 支持四种通信模式,分别是简单 RPC、服务端流式 RPC、客户端流式 RPC 和双向流式 RPC。 简单 RPC 在gRPC中,一个简单的RPC调用遵循请求-响应模型,通常涉及以下几个关键步骤和组件: 请求头&a…...
记一次heapdump泄漏获取服务器权限
文章目录 一、漏洞原因二、漏洞利用三、漏洞进一步利用1、工具下载2、通过关键字查询3、通过配置redis的默认账号和密码进行登录4、添加定时计划任务,进行反弹shell5、成功获取服务器的shell补充四、总结五、免责声明一、漏洞原因 扫描目录发现某个spring框架存在大量泄露信息…...
大疆Livox MID-360安装ROS1/2驱动 Ubuntu20.04
文章目录 一、接线连接二、安装上位机可视化工具三、安装ROS驱动3.1 配置静态IP3.2 安装Livox SDK23.3 安装ROS驱动3.4 驱动 本文介绍如何在Ubuntu20.04中安装大疆Livox MID-360的ROS1/2驱动 一、接线连接 livox航插一分三线,其中航空母头连接激光雷达,…...
Android 重启App
要重启 Android 应用程序,可以使用 PendingIntent 和 AlarmManager 来实现。下面是一种实现方式: fun restartApp(context: Context) {val packageManager context.packageManagerval intent packageManager.getLaunchIntentForPackage(context.packa…...
C语言的前置知识:数据量单位、汇编语言和寄存器
数据量单位 位(bit)是计算机中最小的存储单位,每一位可以存储一个二进制码值的0或1。而字节(byte)则通常是由八个位组成的一个存储单元。在计算机中,字节是最小的可寻址单位,这意味着 CPU 在使…...
【IDEA】在工具栏设置快速创建包和类的图表
页面效果: 操作步骤: 设置 --> 外观与行为 --> 菜单与工具栏 --> 点击 主工具栏 --> 点击 ---- --> 点击 号 --> 添加操作 主菜单 --> 文件 --> 文件打开操作 --> 打开项目操作 --> 新建 --> 往下找 找到 clas…...
int arrayL = sizeof(array) / sizeof(array[0]);
我有一个四个元素的doublearray,这里我会得到4还是5? 在C或C中,使用 sizeof(array) / sizeof(array[0]) 来计算数组的长度是一种常见的方法。但是,这种方法只适用于在同一作用域中声明的数组,而不适用于函数参数传递的…...
FFmpeg——使用Canvas录制视频尚存问题的解决方案
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
css进阶知识点速览
0前言 零基础部分的博客 1选择器进阶 1.1后代选择器 作用:根据html标签的嵌套关系,选择父元素后代中满足条件的元素 选择器语法:选择器1 选择器2 {css} 结果: 在选择器1所找到标签的后代中 注意: 后代包括…...
P2047 [NOI2007] 社交网络
Portal. 观察到数据范围 n ≤ 100 n\leq 100 n≤100,考虑用 Floyd。 在 Floyd 更新最短路的过程中,如果以当前结点为中转点的路径更新过,那么可以累加答案;否则,更新最短路径并重置答案。 统计答案时,枚…...
线性表的顺序存储
1.创建:实质是对data与length的修改 //定义一个线性表 typedef struct {int data[MaxSize];//存储线性表的元素 int length;//线性表的长度 }SqList; //新建一个表 void create(SqList &l){//传入地址才可以对其值进行改变 printf("请输入线性表的长度&…...
ChinaSoft 论坛巡礼 | 安全攸关软件的智能化开发方法论坛
2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...
