配置Pthreads
安装平台
Windows10 64位系统
Visual Studio 2019(32位)
C/C++环境:MinGW
下载pthread
下载地址:ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
压缩包解压后有三个文件夹:
Pre-built.2
Pthreads.2
QueueUserAPCEx
主要用到Pre-built.2下的三个文件夹,分别是dll(动态链接库)、include(头文件库)以及lib(静态链接库)。
相关阅读
OpenMP实现求矩阵均值最大值以及最小值
OpenMP实现数据统计
Pthreads实现任务队列
Pthreads实现梯形积分
visual studio 2019配置Pthreads和OpenMP
CodeBlocks 17.12配置Pthreads和OpenMP
环境配置
项目→属性→配置属性→VC++目录
在包含目录中添加include路径,如下图所示
在库目录中添加lib路径,如下图所示
注:根据系统选择,32位选择x86,64位选择x64。
在连接器→输入,附加依赖项添加 pthreadVC2.lib,如下图所示
“timespec”;”struct”类型重定义
以上步骤完成后,编译代码会出现这个报错,只需要编辑pthread.h文件开头部分,找到第33行如下所示代码
#if !defined( PTHREAD_H )
#define PTHREAD_H
在第35行加入如下代码:
#define HAVE_STRUCT_TIMESPEC
测试代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int thread_count;
void* Hello(void* rank);
int main(int argc, char* argv[]) {
long i;
pthread_t* thread_handles;
thread_count = 5;
thread_handles = malloc(thread_count*sizeof(pthread_t));
for (i = 0; i < thread_count; i++)
pthread_create(&thread_handles[i], NULL, Hello, (void*)i);
printf("Hello from the main thread\n");
for (i = 0; i < thread_count; i++)
pthread_join(thread_handles[i], NULL);
free(thread_handles);
return 0;
}
void* Hello(void* rank) {
long my_rank = (long) rank;
printf("Hello from thread %ld of %d\n", my_rank, thread_count);
return NULL;
}
注:如果出现C2440 “=”: 无法从“void *”转换为“pthread_t *”错误,只需将.cpp文件改为.c文件。
测试结果
配置OpenMP
使用平台
Windows10 64位系统
Visual Studio 2019(32位)
C/C++环境:MinGW
开启OpenMP
调试→属性→C/C++→所有选项→OpenMP支持改为是,如下图所示
测试代码
#include "stdio.h"
#include "omp.h"
int main()
{
printf("Hello from serial.\n");
printf("Thread number = % d\n",omp_get_thread_num());
#pragma omp parallel
{
printf("Hello from parallel.Thread number = % d\n", omp_get_thread_num());
}
printf("Hello from serial again.\n");
return 0;
}