环境: win10+vs2017+C 语言 + pthread
1、下载 pthreads 配置包
![[转]vs2017如何配置pthread环境 - 图1](/uploads/projects/ixxw@cpp/565bc2980968040455743e05ec008d5f.png)
2、解压然后配置文件
其实就是复制粘贴到 vs2017 的安装目录下和本地动态库下
![[转]vs2017如何配置pthread环境 - 图2](/uploads/projects/ixxw@cpp/ad43a0ac9c1ac2dde50990db1142ab2b.png)
主移动这三个文件夹的内容。
1. 将 include 里的内容复制 vs2017 的 include 下
路径为:你安装的主路径\vs2017\comm\VC\Tools\MSVC\14.16.27023\include
2. 将 lib 里的内容复制 vs2017 的 lib 下
路径为:你安装的主路径\vs2017\comm\VC\Tools\MSVC\14.16.27023\lib
这里有点不一样,x86 和 x64 都要分别复制进去。
3. 将 dll 里的内容复制系统目录下,这里 x86 和 x64 复制的位置不同
x86:
dll\x86 下的文件复制到C:\Windows\SysWOW64
x64
dll\x64 下的文件拷贝到C:\Windows\System32
3、添加 timespec 防重定义
![[转]vs2017如何配置pthread环境 - 图3](/uploads/projects/ixxw@cpp/a87fea658d7cd9617292212fcff8f226.png)
主要目的:就是防止 pthread.h 提示 error C2011: “timespec”:“struct” 类型重定义,原因就是 time.h 重复定义了。
操作:在使用的项目属性->预处理器->添加“HAVE_STRUCT_TIMESPEC”。
4、配置连接器
![[转]vs2017如何配置pthread环境 - 图4](/uploads/projects/ixxw@cpp/b20ae54153b185a81509b421580bd849.png)
点击调试->项目属性(最后一个我。一般是你取项目名字,例如:Project1属性)
![[转]vs2017如何配置pthread环境 - 图5](/uploads/projects/ixxw@cpp/2a856456d6976417f67be2f988d2f7e9.png)
添加以下三个 ddl:
pthreadVC2.libpthreadVCE2.libpthreadVSE2.lib
5、测试
其实到这里全部都结束了,附赠一段代码测试这个 pthread,其实直接 include 编译 就可以了。当然,还需要验证功能。
#include <stdio.h>#include <pthread.h>#include <windows.h>int g_number = 0;#define MAX_COUNT 1000void *counter1(void* args) {int i = 0;while (i < MAX_COUNT){g_number++;printf("hi,i am pthread 1, my g_number is [%d]\n", g_number);Sleep(1);i++;}}void *counter2(void* args) {int j = 0;while (j < MAX_COUNT){g_number++;printf("hi,i am pthread 2, my g_number is [%d]\n", g_number);Sleep(1);j++;}}int main() {pthread_t t1;pthread_t t2;pthread_create(&t1, NULL, counter1, NULL);pthread_create(&t2, NULL, counter2, NULL);getchar();return 0;}
![[转]vs2017如何配置pthread环境 - 图6](/uploads/projects/ixxw@cpp/670fbf4f0aefaebb914055588bd3bf4f.png)
可以看到,这里两个线程都交替开始工作了。不过细心的兄弟已经发现,这个输出不太对?不应该是 2000 吗怎么少几个?
留下个思考题:
1、为什么少加了几个?根本原因是什么?
2、怎么通过更改 代码的判断条件或者 sleep 或者 pthread_mutex_lock 去解决这个问题,让他输出为 2000?哪种方法更好?
https://blog.csdn.net/qq_35292447/article/details/103541936
