一个程序
cpp
#include <iostream>
#include <vector>
#include "Thread.hpp"
int TicketNum = 10000;
void BuyTicket(int num)
{
while(true)
{
if(TicketNum>0)
{
std::cout << "get a ticket,number of ticket:" << TicketNum-- << std::endl;
}
else
{
break;
}
}
}
int main()
{
std::vector<ThreadModule::Thread<int>> vecThreads;
for(int i = 0;i<10;i++)
{
vecThreads.emplace_back(BuyTicket,-1); //方便演示,模板参数先随便给一个
}
for(int i = 0;i<10;i++)
{
vecThreads[i].Start();
}
for(int i = 0;i<10;i++)
{
vecThreads[i].Join(); //注意必须要等待,如果等待的话,主线程一执行完整个进程就直接退出了
}
return 0;
}
在上面的程序当中,模拟实现了10个线程抢票的场景,现在来看看运行结果

发现票是居然为负数了,但是我们的判断条件里面明明写了需要票数大于0的时候才执行抢票功能,下面解释一下原因

每一次抢票让票数减去一都会执行这一段汇编指令:先将变量从内存加载到CPU的寄存去中,变量减去之后再将变量写回内存,这样当线程A将值从内存写到寄存器当中判断大于0立马切换到线程B