初识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 Eloquent性能优化技巧_Laravel N+1查询问题解决  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel storage目录权限问题_Laravel文件写入权限设置  微信推文制作网站有哪些,怎么做微信推文,急?  详解jQuery中的事件  EditPlus中的正则表达式 实战(2)  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何实现数据库事务?(DB Facade示例)  如何快速查询网站的真实建站时间?  EditPlus中的正则表达式 实战(1)  如何用美橙互联一键搭建多站合一网站?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  如何在IIS7上新建站点并设置安全权限?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel如何处理CORS跨域请求?(配置示例)  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速生成ASP一键建站模板并优化安全性?  昵图网官方站入口 昵图网素材图库官网入口  如何在宝塔面板中修改默认建站目录?  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何在IIS中配置站点IP、端口及主机头?  如何选择可靠的免备案建站服务器?  微信小程序 五星评分(包括半颗星评分)实例代码  如何自定义建站之星网站的导航菜单样式?  如何在万网自助建站中设置域名及备案?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  如何快速搭建安全的FTP站点?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  微信小程序 闭包写法详细介绍  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Python3.6正式版新特性预览  如何彻底删除建站之星生成的Banner?  如何在万网利用已有域名快速建站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何在新浪SAE免费搭建个人博客?  利用python获取某年中每个月的第一天和最后一天  制作旅游网站html,怎样注册旅游网站?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  微信小程序 input输入框控件详解及实例(多种示例)  如何制作一个表白网站视频,关于勇敢表白的小标题?  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】