初识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建站如何实现端口转发?
下一篇:U盘锁电脑,安全新把关
下一篇:U盘锁电脑,安全新把关

