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库文件路径。

将生成的库文件路径(例如我的是:C:\Users\15250\Downloads\pthread-win32-master\windows\VS2022\bin\Debug-Unicode-64bit-x64)路径加入到项目中,如下:

③添加库文件名称。

\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));

	int 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后,主线程结束仍会将子线程结束掉。暂无时间深究该问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大的马师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值