文章目录
Linux线程
4. 线程互斥
我们之前使用了线程函数实现了多线程的简单计算模拟器。
可以看到多线程可以很好的运行并且计算得到我们想要的结果。
那我们照猫画虎一样,看看可不可以实现多线程模拟抢票的过程:
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <unistd.h>
#define NUM 5 //线程数量
int tickets=100; //全局变量作为剩余的票数
//线程执行的模拟抢票函数
void *getTickets(void *args)
{
uint64_t id=(uint64_t)args;
while(true)
{
if(tickets>0)
{
std::cout<<"thread id: "<<id<<" remaining tickets: "<<tickets--<<std::endl;
}
else
{
break;
}
}
return nullptr;
}
int main()
{
//使用多线程模拟抢票过程
std::vector<pthread_t> threads;
for(int i=1;i<=5;i++)
{
pthread_t tid;
pthread_create(&tid,nullptr,&getTickets,(void*)(i));
threads.push_back(tid)