### 一、安装pthreads-w32-2-8-0-release.exe
> 至于怎么下载这个exe还是自己去百度吧,CSDN上反正可以下载,而且有免费版本的,资源里面搜下就行了。
然后安装这个就行了(按照下面的123来就行了)。
![](https://box.kancloud.cn/2016-08-19_57b6ce7d36a61.jpg)
然后Pre-built.2这个文件夹有个include和lib,把它们分别拷贝到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC这个目录下面的include和lib下面。
### 二、 卖票的例子程序
~~~
#include "stdafx.h"
#include <pthread.h>
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib, "pthreadVC2.lib")
// ticket count
int m_nTicket = 100;
// thread lock
pthread_mutex_t m_tMutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_run(void* parm)
{
while(true)
{
//pthread_mutex_lock(&m_tMutex);
if (m_nTicket>0)
{
Sleep(1000);
printf("第%d号窗口卖出了第",pthread_self());
printf("%d张票。\n",m_nTicket);
m_nTicket--;
}else{
break;
}
//pthread_mutex_unlock(&m_tMutex);
}
return NULL;
}
int main()
{
pthread_t tid1;
pthread_t tid2;
// create two threads
pthread_create(&tid1, NULL, thread_run,NULL);
pthread_create(&tid2, NULL, thread_run,NULL);
/*// 加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行
// 调用pthread_self()函数可以获得自身的线程号
pthread_join(pthread_self(),NULL);*/
getchar();
return 0;
}
~~~
嘿,两个线程卖票的例子。
这里面涉及到线程的互斥,还需要自己去琢磨。
互斥就是两个线程使用同一个变量的时候数据可能会发生异常,这时候就要加锁了,那个数据只能让一个线程使用。
可以自己试验一下。
下面是调试的结果:
![](https://box.kancloud.cn/2016-08-19_57b6ce7d59d4a.jpg)
对了,如果编译的时候发生这个错误:
![](https://box.kancloud.cn/2016-08-19_57b6ce7d769ad.jpg)
在解压出来的Pre-built.2\lib文件夹里面把这个pthreadVC2.dll复制到C:\Windows\SysWOW64这里面去,32位的就对应的复制到32位那个文件夹。
- 前言
- C++读取配置文件
- 结构体内存对齐后所占内存空间大小的计算
- do{}while(0)的妙用
- Cocos2dx实现翻牌效果(CCScaleTo与CCOrbitCamera两种方式)
- C++的error LNK2019: 无法解析的外部符号编译错误
- Java使用JNI调用C++的完整流程
- strupr与strlwr函数的实现
- strcat函数实现
- Windows上VS使用pthread重温经典多线程卖票(pthreads-w32-2-8-0-release.exe)(windows上使用pthread.h)
- pthread的pthread_join()函数理解实验
- 顺序存储结构和链式存储结构的选择
- C语言冒泡排序
- VS看反汇编、寄存器、内存、堆栈调用来学习程序设计
- 快速排序
- C++的构造函数初始化列表
- fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory
- C++实现简单的String类