pthread 学习笔记

windows和Linux的pthread用法稍有不同。

windows:

1.下载pthreads-w32-2-8-0-release.exe

下载地址:ftp://sourceware.org/pub/pthreads-win32


2. 安装pthreads-w32-2-8-0-release.exe

       双击pthreads-w32-2-8-0-release.exe,点击Browse选择安装到的目录,然后点击Extract解压,完成后点击Done。

       之后会在安装目录看到有三个文件夹Pre-built.2、pthreads.2、QueueUserAPCEx.

第一个是生成库(头文件和库文件那些),第二个是源码,第三个不清楚,像是测试程序。

       将Pre-built.2文件夹下的include和lib文件夹里的文件复制到VS2008对应的include和lib目录,我这里是C:\Program Files\Microsoft Visual Studio 9.0\VC\include和C:\Program Files\Microsoft VisualStudio 9.0\VC\lib.


程序中加入#include<pthread.h>和#pragma comment(lib, "pthreadVC2.lib")  //必须加上

这样还是会出现丢失pthreadVC2.dll,把这个dll复制到和程序exe一个文件夹中。

#include <pthread.h> 
#include <stdio.h> 
#define NUM_THREADS     5 
 
void *PrintHello(void *threadid) 
{ 
   int tid; 
   tid = (int)threadid; 
   printf("Hello World! It's me, thread #%d!\n", tid); 
   pthread_exit(NULL); 
} 
 
int main (int argc, char *argv[]) 
{ 
   pthread_t threads[NUM_THREADS]; 
   int rc, t; 
   for(t=0; t<NUM_THREADS; t++){ 
      printf("In main: creating thread %d\n", t); 
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); 
      if (rc){ 
         printf("ERROR; return code from pthread_create() is %d\n", rc); 
         exit(-1); 
      } 
   } 
   pthread_exit(NULL); 
} 
这里需要注意的是

1、pthread_create的最后一个参数可以给函数PrintHello传参。

2、NUM_THREADS和OpenMP的num_threads设置时不一样的,想要8个线程运行程序,NUM_THREADS要设成7。这7个线程是主线程以外的线程运行。

Linux:

上面程序可以照搬,不过不需要加上#pragma comment(lib, "pthreadVC2.lib")  ,编译的时候用g++ -o test test.cc -lpthread编译。

过程中出现一个问题是cast from ‘void*’ to ‘int’ loses precision,因为

int tid; 
tid = (int)threadid;

电脑是64位的,指针长度是8字节,而int 型只有4字节,所以出错,64位机器上安装的VS没这个问题,大概是默认VS是32位的。

64位机器上long是8字节的,因此需要改为long型。

虽然还会有warning但不碍事了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值