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位那个文件夹。
';