Windows上VS使用pthread重温经典多线程卖票(pthreads-w32-2-8-0-release.exe)(windows上使用pthread.h)
最后更新于:2022-04-01 20:13:34
### 一、安装pthreads-w32-2-8-0-release.exe
> 至于怎么下载这个exe还是自己去百度吧,CSDN上反正可以下载,而且有免费版本的,资源里面搜下就行了。
然后安装这个就行了(按照下面的123来就行了)。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/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
#include
#include
#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://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-19_57b6ce7d59d4a.jpg)
对了,如果编译的时候发生这个错误:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-19_57b6ce7d769ad.jpg)
在解压出来的Pre-built.2\lib文件夹里面把这个pthreadVC2.dll复制到C:\Windows\SysWOW64这里面去,32位的就对应的复制到32位那个文件夹。
';