Windows上VS使用pthread重温经典多线程卖票(p

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

至于怎么下载这个exe还是自己去百度吧,CSDN上反正可以下载,而且有免费版本的,资源里面搜下就行了。

然后安装这个就行了(按照下面的123来就行了)。

然后Pre-built.2这个文件夹有个include和lib,把它们分别拷贝到C:Program Files (x86)Microsoft Visual Studio 10.0VC这个目录下面的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张票。
",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;
}

嘿,两个线程卖票的例子。

这里面涉及到线程的互斥,还需要自己去琢磨。

互斥就是两个线程使用同一个变量的时候数据可能会发生异常,这时候就要加锁了,那个数据只能让一个线程使用。

可以自己试验一下。

下面是调试的结果:

对了,如果编译的时候发生这个错误:

在解压出来的Pre-built.2lib文件夹里面把这个pthreadVC2.dll复制到C:WindowsSysWOW64这里面去,32位的就对应的复制到32位那个文件夹。

文章导航