Windows中使用pthread线程库

2023-12-15 06:52:32

由于时间成本,不想使用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后,主线程结束仍会将子线程结束掉。暂无时间深究该问题。

文章来源:https://blog.csdn.net/qq_38967414/article/details/135006128
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。