Windows上VS使用pthread重温经典多线程卖票(pthreads-w32-2-8-0-release.exe)(windows上使用pthread.h)

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

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



然后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;
}
嘿,两个线程卖票的例子。
这里面涉及到线程的互斥,还需要自己去琢磨。
互斥就是两个线程使用同一个变量的时候数据可能会发生异常,这时候就要加锁了,那个数据只能让一个线程使用。
可以自己试验一下。
下面是调试的结果:


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


在解压出来的 Pre-built.2\lib文件夹里面把这个pthreadVC2.dll复制到C:\Windows\SysWOW64这里面去,32位的就对应的复制到32位那个文件夹。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值