买火车票是大家春节回家最为关注的事情,我们就简单模拟一下火车票的售票系统
(为使程序简单,我们就抽出最简单的模型进行模拟):有100张从北京到赣州的火车票,在6个窗口同时出售,保证系统的稳定性和数据的原子性。)
#include <iostream>
#include <list>
#include <thread>
#include <mutex>
#include <chrono>
#include <future>
#include <condition_variable>
std::condition_variable cv;
std::mutex mutx;
int ticket = 100;
bool isrunning = true;
void consumer(int id)
{
while (ticket > 0)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::lock_guard<std::mutex> lck(mutx);
if(ticket > 0)
{
int x = (rand() % (10 - 1)) + 1;
if (x > ticket)
x = ticket;
std::cout << "售票窗口[" << id << "]: ";
ticket -= x;
std::cout << "售出 " << x << "票" << std::endl;
std::cout << "剩余 " << ticket << "票" << std::endl;
}
else
{
std::cout << "售票窗口[" << id << "]: ";
std::cout << "票已经售完..." << std::endl;
}
}
}
int main()
{
std::cout << "main thread:" << std::this_thread::get_id() << std::endl;
std::cout << "总共票数为" << ticket << std::endl;
std::thread c[5];
for (int i = 0; i < 5; i++)
c[i] = std::thread(consumer, i+1);
for (int i = 0; i < 5; i++)
c[i].join();
std::cout << "it's over..." << std::endl;
return 0;
}

1840

被折叠的 条评论
为什么被折叠?



