环境: win10+vs2017+C 语言 + pthread
1、下载 pthreads 配置包
2、解压然后配置文件
其实就是复制粘贴到 vs2017 的安装目录下和本地动态库下
主移动这三个文件夹的内容。
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 防重定义
主要目的:就是防止 pthread.h 提示 error C2011: “timespec”:“struct” 类型重定义,原因就是 time.h 重复定义了。
操作:在使用的项目属性->预处理器->添加“HAVE_STRUCT_TIMESPEC”。
4、配置连接器
点击调试->项目属性(最后一个我。一般是你取项目名字,例如:Project1属性)
添加以下三个 ddl:
pthreadVC2.lib
pthreadVCE2.lib
pthreadVSE2.lib
5、测试
其实到这里全部都结束了,附赠一段代码测试这个 pthread,其实直接 include 编译 就可以了。当然,还需要验证功能。
#include <stdio.h>
#include <pthread.h>
#include <windows.h>
int g_number = 0;
#define MAX_COUNT 1000
void *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;
}
可以看到,这里两个线程都交替开始工作了。不过细心的兄弟已经发现,这个输出不太对?不应该是 2000 吗怎么少几个?
留下个思考题:
1、为什么少加了几个?根本原因是什么?
2、怎么通过更改 代码的判断条件或者 sleep 或者 pthread_mutex_lock 去解决这个问题,让他输出为 2000?哪种方法更好?
https://blog.csdn.net/qq_35292447/article/details/103541936