Windows中使用pthread线程库

由于时间成本,不想使用Windows线程API,因此想用pthread线程库;但pthread是Linux默认的POSIX线程库,Windows中并不自带,需要自己配置。

因为pthread遵循POSIX标准,因此其在Windows中使用应该和Linux中大同小异。

pthread库的基本使用参考:

Linux线程:线程的创建、属性、回收、退出、取消_linux线程销毁的方式-CSDN博客

Linux线程:互斥锁mutex的使用_linux线程互斥锁的使用方法-CSDN博客

Linux线程:读写锁的使用_linux 读写锁函数-CSDN博客

Linux线程:条件变量_linux线程条件变量-CSDN博客


1. 下载

https://github.com/GerHobbelt/pthread-win32


2. 生成库文件

S1:解压后,进入目录:\pthread-win32-master\windows\VS2022

S2:打开.sln文件;

S3:分别将项目pthread_dllpthread_static_lib编译生成动态库、静态库;生成的库文件在目录\pthread-win32-master\windows\VS2022\bin\Debug-Unicode-64bit-x64下。


3. 配置项目

新建VS项目,创建空白的.c.cpp源文件;

打开项目属性。

①添加头文件路径。

将路径\pthread-win32-master加入到项目中,如下:

②添加lib库文件路径。

将解压后文件中的include目录路径加入到项目中,如下:

③添加库文件名称。

\pthread-win32-master\windows\VS2022\bin\Debug-Unicode-64bit-x64目录下的如下两个.lib文件的名称加入到项目中,如下:

 

④添加动态库

\pthread-win32-master\windows\VS2022\bin\Debug-Unicode-64bit-x64目录下的pthread.dll文件复制到项目文件夹中:


4. 编码测试

打开创建的.c或者.cpp源文件,测试如下代码:

#include<stdio.h>
#include<pthread.h>
#include<string.h>

void threadFunc() {
	Sleep(100);
	for (int i = 0; i < 10; i++) {
		printf("thread 01: %d\n", i);
	}
}

int main() {
	pthread_t tid;
	void* r = NULL;
	memset(&tid, 0, sizeof(tid));

	ret = pthread_create(&tid, NULL, threadFunc, NULL);
	Sleep(100);

	for (int i = 0; i < 10; i++) {
		printf("Main thread: %d\n", i);
	}

	pthread_join(tid, &r);

	return 0;
}

运行结果:


备注:

使用时发现该pthread库和Linux中的pthread库有所区别:

(1)pthread_t类型在Linux中为基本类型的别名,而在Windows中为一个结构体,因此需使用memset进行初始化,而不是直接赋值;使用pthread_self()获取线程号时,应该变为获取其中的结构体成员。

(2)pthread_detach使用有问题,Linux中子线程detach后,其资源就由内核回收了,此时若主线程先结束的话,也不影响子线程的继续运行;而在Windows中使用时发现,子线程detach后,主线程结束仍会将子线程结束掉。暂无时间深究该问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UDP特性之广播

UDP特性之广播 1. 广播的特点2. 设置广播属性3. 广播通信流程4. 通信代码总结 1. 广播的特点 广播的UDP的特性之一&#xff0c;通过广播可以向子网中多台计算机发送消息&#xff0c;并且子网中所有的计算机都可以接收到发送方发送的消息&#xff0c;每个广播消息都包含一个特殊…

Clickhouse RoaringBitmap

https://blog.csdn.net/penriver/article/details/119736050 https://juejin.cn/post/7179956435806076988 BitMap适合连续密集的正整数存储&#xff0c;对于稀疏的正整数存储&#xff0c;其性能在很多时候是没办法和int数组相比的&#xff0c;尤其是正整数跨度较大的场景&…

外汇天眼:Coinbase国际交易所将启动现货市场

Coinbase宣布了Coinbase国际交易所扩张的下一阶段——退出符合条件客户的非美国现货市场。 这一最新发展旨在满足Coinbase全球用户群体的独特需求和需求&#xff0c;同时强化其扩大国际访问可信产品和服务的战略使命。 Coinbase国际交易所现货交易的推出和扩展将分阶段进行。1…

大数据/人工智能/EXCEL/R语言精品教材推荐

泰迪智能科技携手人民邮电出版社通过采用任务式、项目式等多种教材编写模式&#xff0c;教材内容注重实践能力培养&#xff0c;贴合教师教学实际和学生实践实验&#xff0c;已经被1500余所院校选用为教材。 图书优势 理实一体化 本系列教材注重学生的实践能力培养&#xff0…

TCP/UDP 协议

目录 一.TCP协议 1.介绍 2.报文格式 ​编辑 确认号 控制位 窗口大小 3.TCP特性 二.TCP协议的三次握手 1.tcp 三次握手的过程 三.四次挥手 2.有限状态机 四.tcp协议和udp协议的区别 五.udp协议 UDP特性 六.telnet协议 一.TCP协议 1.介绍 TCP&#xff08;Transm…

Sql标准梳理

SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。SQL标准由国际标准化组织&#xff08;ISO&#xff09;和美国国家标准化组织&#xff08;ANSI&#xff09;制定和维护&#xff0c;旨在提供…

安全护航:迅软DSE加密软件在设计院所图纸文件中的成功案例分享

近年来&#xff0c;随着信息化强国战略和可持续发展方针的推动&#xff0c;国内各大设计院所和建筑机构积极推进信息化建设&#xff0c;将电子文件作为主要的信息存储方式&#xff0c;并将其作为单位内外部信息交换的关键载体。在这一背景下&#xff0c;创新设计作为建筑设计单…

csrf和ssrf的区别,攻击如何防护

CSRF&#xff08;跨站请求伪造&#xff09;和SSRF&#xff08;服务器端请求伪造&#xff09;都是网络安全中的常见攻击类型&#xff0c;但它们的目标和攻击方式有所不同。理解这两种攻击的区别对于有效地防御它们至关重要。 CSRF和SSRF的主要区别在于攻击的发起者和目标。CSRF…

Crypto基础之密码学

FLAG&#xff1a;20岁的年纪不该困在爱与不爱里&#xff0c;对吗 专研方向: 密码学&#xff0c;Crypto 每日emo&#xff1a;今年你失去了什么&#xff1f; Crypto基础之密码学 前言一、编码Base编码base64&#xff1a;Base32 和 Base16&#xff1a;uuencode&#xff1a;xxencod…

GO并发编程综合应用

一.GO并发编程综合应用 1.生产者消费者模式 1.1需求分析 ​ 生产者每秒生产一个商品&#xff0c;并通过物流公司取货 ​ 物流公司将商品运输到商铺 ​ 消费者阻塞等待商铺到货&#xff0c;需要消费10次商品 1.2实现原理 1.3代码实现&#xff1a; package mainimport (&q…

chatGPT 国内版,嵌入midjourney AI创作工具

聊天GPT国内入口,免切网直达,可直接多语言对话,操作简单,无需复杂注册,智能高效,即刻使用.可以用作个人助理,学习助理,智能创作、新媒体文案创作、智能创作等各种应用场景! 地址&#xff1a; https://ai.wboat.cn/

56.微服务面试篇

目录 一、SpringCloud常见组件有哪些&#xff1f; 二、Nacos源码分析和Sentinel源码分析。 三、Nacos的服务注册表结构是怎样的&#xff1f; 四、Nacos如何支撑数十万服务注册压力&#xff1f; 五、Nacos如何避免并发读写冲突问题&#xff1f; 六、Nacos与Eureka的区别有…

locust 压测 websocket

* 安装 python 3.8 https://www.python.org/ py --version * 安装 locust pip install locust2.5.1 -i http://pypi.douban.com/simple/ pip install locust2.5.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ locust -V 备注&#xff1a;-i 是切换下载源 * 安装依赖 pip ins…

ElasticSearch - networking配置global

版本8.11 单机部署了一个节点 在elasticsearch.yml中 配置了network.host: 8.8.8.8(之前为127.0.0.1) 但启动服务失败 报错信息为: BindTransportException: Failed to bind to 8.8.8.8:[9300-9399] 为啥要配置8.8.8.8 是因为参考的官方说明 Networking | Elasticsearch Gu…

Docker知识点整理

Docker和虚拟机技术的区别&#xff1a; 传统的虚拟机&#xff0c;可以虚拟出一条硬件&#xff0c;运行一个完整的操作系统&#xff0c;在这个操作系统上安装和运行所需的软件 容器内的应用可以直接运行在宿主 主机的内核中&#xff0c;容器没有自己的内核&#xff0c;也不用虚…

云上丝绸之路| 云轴科技ZStack成功实践精选(西北)

古有“丝绸之路” 今有丝绸之路经济带 丝路焕发新生&#xff0c;数智助力经济 云轴科技ZStack用“云”护航千行百业 沿丝绸之路&#xff0c;领略西北数字化。 古丝绸之路起点-陕西 集历史与现代交融&#xff0c;不仅拥有悠久的历史文化积淀&#xff0c;而且现代化、数字化发…

卡片C语言(2021年蓝桥杯B)

分析&#xff1a;我们用一个数组来记录卡牌&#xff0c;我们每使用一张卡牌&#xff0c;就减一张&#xff0c;当卡牌数为-1的时候&#xff0c;说明不够用了&#xff0c;此时我们就打印上一个组合的数字。 #include <stdio.h> int main(){int num[10],i,m,n,j;for(i0;i&l…

AIGC重塑教育:AI大模型驱动的教育变革与实践

目录 引言 AI与教育工作者 ​教育资源不平衡 引言 AI正迅猛地改变着我们的生活。 根据高盛发布的一份报告&#xff0c;AI有可能取代3亿个全职工作岗位&#xff0c;影响全球18%的工作岗位。在欧美&#xff0c;或许四分之一的工作可以用AI完成。另一份Statista的报告预测&…

Nginx 服务器安装及配置文件详解

1. 安装nginx 1.1 选择稳定版本 我们编译安装nginx来定制自己的模块&#xff0c;机器CentOS 6.2 x86_64。首先安装缺少的依赖包&#xff1a; # yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 这些软件包如果yum上没有的话…

springoot集成kafka

1.常见两种模式 2.高可用 和 负载均衡 组内:消费者 一个只能消费一个分区 组外:消费者消费是订阅者模式