c++11自带thread完成一个双线程交替买票程序

c++11果然非常强大,没想到自带了thread类,这样在windows上就省去了很多不必要的麻烦。

下面是一个简单的交替卖票的demo,每个线程里面有加入了互斥锁

#include "iostream"
#include "thread"
#include "vector"
#include "string"
#include "mutex"
#include "windows.h"
using namespace std;

int ticket = 100;
mutex g_mutex;

void thread1()
{
	while (true)
	{
		g_mutex.lock();
		if (ticket > 0)
		{
			//Sleep(10);
			--ticket;
			cout << "1机卖出一张票:" << ticket << endl;
			g_mutex.unlock();
			Sleep(10);
		}
		else
		{
			g_mutex.unlock();
			break;
		}
	}
//	g_mutex.unlock();
}

void thread2()
{
	//lock_guard<mutex> lg(g_mutex);
	while (true)
	{
		g_mutex.lock();
		if (ticket > 0)
		{
		//	Sleep(10);
			--ticket;
			cout << "2机卖出一张票:" << ticket << endl;
			g_mutex.unlock();
			Sleep(10);
		}
		else
		{
			g_mutex.unlock();
			break;
		}
	}
}


int main() {
	thread t2(thread2);
	thread t1(thread1);
	
	t1.join();
	t2.join();
	return 0;

}

本来把Sleep放在锁的里面,得出的结果是t2线程独占买票,想了一下,感觉是Sleep的问题,把Sleep放外面后果然正确了。

多线程编程的确复杂,虽然只掀开了冰山一角,便感受到了里面的奇妙

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值