环境: win10+vs2017+C 语言 + pthread


1、下载 pthreads 配置包

[转]vs2017如何配置pthread环境 - 图1

下载链接

2、解压然后配置文件

其实就是复制粘贴到 vs2017 的安装目录下和本地动态库下
[转]vs2017如何配置pthread环境 - 图2

主移动这三个文件夹的内容。

1. 将 include 里的内容复制 vs2017 的 include 下

  1. 路径为:你安装的主路径\vs2017\comm\VC\Tools\MSVC\14.16.27023\include

2. 将 lib 里的内容复制 vs2017 的 lib 下

  1. 路径为:你安装的主路径\vs2017\comm\VC\Tools\MSVC\14.16.27023\lib

这里有点不一样,x86 和 x64 都要分别复制进去。

3. 将 dll 里的内容复制系统目录下,这里 x86 和 x64 复制的位置不同

x86:

  1. dll\x86 下的文件复制到C:\Windows\SysWOW64

x64

  1. dll\x64 下的文件拷贝到C:\Windows\System32

3、添加 timespec 防重定义

[转]vs2017如何配置pthread环境 - 图3

主要目的:就是防止 pthread.h 提示 error C2011: “timespec”:“struct” 类型重定义,原因就是 time.h 重复定义了。

  1. 操作:在使用的项目属性->预处理器->添加“HAVE_STRUCT_TIMESPEC”。

4、配置连接器

[转]vs2017如何配置pthread环境 - 图4

  1. 点击调试->项目属性(最后一个我。一般是你取项目名字,例如:Project1属性)

[转]vs2017如何配置pthread环境 - 图5

添加以下三个 ddl:

  1. pthreadVC2.lib
  2. pthreadVCE2.lib
  3. pthreadVSE2.lib

5、测试

其实到这里全部都结束了,附赠一段代码测试这个 pthread,其实直接 include 编译 就可以了。当然,还需要验证功能。

  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <windows.h>
  4. int g_number = 0;
  5. #define MAX_COUNT 1000
  6. void *counter1(void* args) {
  7. int i = 0;
  8. while (i < MAX_COUNT){
  9. g_number++;
  10. printf("hi,i am pthread 1, my g_number is [%d]\n", g_number);
  11. Sleep(1);
  12. i++;
  13. }
  14. }
  15. void *counter2(void* args) {
  16. int j = 0;
  17. while (j < MAX_COUNT){
  18. g_number++;
  19. printf("hi,i am pthread 2, my g_number is [%d]\n", g_number);
  20. Sleep(1);
  21. j++;
  22. }
  23. }
  24. int main() {
  25. pthread_t t1;
  26. pthread_t t2;
  27. pthread_create(&t1, NULL, counter1, NULL);
  28. pthread_create(&t2, NULL, counter2, NULL);
  29. getchar();
  30. return 0;
  31. }

[转]vs2017如何配置pthread环境 - 图6

可以看到,这里两个线程都交替开始工作了。不过细心的兄弟已经发现,这个输出不太对?不应该是 2000 吗怎么少几个?

留下个思考题:

1、为什么少加了几个?根本原因是什么?
2、怎么通过更改 代码的判断条件或者 sleep 或者 pthread_mutex_lock 去解决这个问题,让他输出为 2000?哪种方法更好?
https://blog.csdn.net/qq_35292447/article/details/103541936