初识Linux · 线程互斥

发布时间 - 2025-06-19 00:00:00    点击率:

前言:

本文的主题是线程互斥,但是我们不能光单独的把概念引出来,我们肯定要一个场景,所以我们将抢票这个场景引出来,模拟一下抢票的场景,随即引出今天的主题。

那么对于线程互斥这个主题,我们从以下几点介绍:

认识锁和它的接口->解决历史问题->原理角度理解锁->实现角度理解锁。

当然了,因为没有理解抢票这个场景,所以我们暂时不知道锁是什么是正常的,那么,直接进入主题吧!


场景->抢票

抢票的基本逻辑是多个线程一起抢,所以我们需要创建多线程,多线程创建好了之后,都执行同一个函数,即抢票函数。

同时,我们将票的数量固定到只有10000张,让4个线程在规定时间之内抢票,因为cpu里面存在时间片的概念,所以我们不妨设置一个死循环,一个线程在规定时间之内能抢多少就抢多少。

基本逻辑我们已经捋顺了,现在直接实现吧!

代码语言:javascript代码运行次数:0运行复制
int tickets = 10000;void Rounte(const std::string& name){    while(true)    {        if(tickets > 0)        {            usleep(1000);            printf("who: %s, get a ticket: %d\n", name.c_str(), tickets);            tickets--;        }        else        {            break;        }    }}int main(){    Thread t1("thread -1", Rounte);    Thread t2("thread -2", Rounte);    Thread t3("thread -3", Rounte);    Thread t4("thread -4", Rounte);    t1.Start();    t2.Start();    t3.Start();    t4.Start();        t1.Join();    t2.Join();    t3.Join();    t4.Join();    return 0;}

当然了,使用的线程是我们自己实现的线程,使用起来还是比较丝滑的。

那么我们认为的现象应该是最后tickets到了0,循环结束,整个代码完美结束。

不过……?

抢到了负数?

抢到了相同的票?


# linux  # ai  # JavaScript  # 循环  # 接口  # 线程  # 多线程  # 抢到  # 好了  # 互斥  # 多个  # 当然了  # 几点  # 直接进入  # 肯定要  # 暂时不 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何与Pusher实现实时通信?(WebSocket示例)  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Android中AutoCompleteTextView自动提示  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何在阿里云虚拟主机上快速搭建个人网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  原生JS实现图片轮播切换效果  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel怎么使用artisan命令缓存配置和视图  如何撰写建站申请书?关键要点有哪些?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  打造顶配客厅影院,这份100寸电视推荐名单请查收  如何在服务器上配置二级域名建站?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何在Tomcat中配置并部署网站项目?  如何安全更换建站之星模板并保留数据?  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速选择适合个人网站的云服务器配置?  android nfc常用标签读取总结  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Python结构化数据采集_字段抽取解析【教程】  高端网站建设与定制开发一站式解决方案 中企动力  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  bing浏览器学术搜索入口_bing学术文献检索地址  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何在腾讯云服务器快速搭建个人网站?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Laravel观察者模式如何使用_Laravel Model Observer配置  如何快速搭建二级域名独立网站?  javascript中的try catch异常捕获机制用法分析  linux写shell需要注意的问题(必看)  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel怎么实现模型属性的自动加密  魔方云NAT建站如何实现端口转发?