用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
Linux下线程的同步与互斥
Linux下线程的同步与互斥
美食家大橙子
论坛元老
|
2025-3-3 07:09:24
|
显示全部楼层
|
阅读模式
楼主
主题
1923
|
帖子
1923
|
积分
5769
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
开头我们来写一个简单的步伐,实现用多线程的方式来抢票,代码如下:
运行完结果后发现,我这只有一万张票,在if条件判断里我也做了判断,怎么会干到-2来了呢?
运用线程的理论知识我们知道,ticketnum在线程中属于共享资源,它不具有原子性,在我们必要对变量进行减减的时间,内存会将变量存入cpu中减减,然后再把减完后的内容写入内存里三步,
但减减完的数据还没写入内存的时间,进程就被切换了,也就是上面三步线程没做完,所以不具备原子性,当然我们做if判断的时间,也是一种计算也是要进cpu的,在末了数据都只是1的时间,四个线程都进去了,随着变量被减减,他就会被减到负数。为了避免这种情况,可以使用互斥锁;
一,mutex
锁的使用最好是在临界区内,锁最好涵盖代码少一点,要不然会影响运行效率,假如使用全局锁,可用PTHREAD_MUTEX_TNITIALIZER来初始化锁,这样只必要声明:
初始化好了怎么加锁?:
可以看到,加锁解锁都得在临界区内加,并且不能大块代码的加锁。
可以看到,对临界区加锁之后,变量减减就变成具有原子性的了,加锁的本质就是对资源进行预定,整体使用资源,假如申请锁的时间,锁被别人拿走了,这时间其他线程就会阻塞等待直到前面线程运行完再竞争,线程在访问临界区代码的时间,可以不可以切换??可以切换!!
我被切走的时间,别人能进来吗??不能!我是抱着锁,被切换的!!不就是串行吗!效率低的原因!原子性!上面是全局初始化锁的方式,不用我们用init和destory方法,下面就是用局部初始化锁的方式书写代码:
起首对锁进行初始化,再在结束位置销毁锁,
其结果也是一样的:
二,cond(同步)
根据mutex的学习,来映伸出下一个问题,当一个线程拿完锁回到队列中再次与其他线程竞争锁的时间,
会有部分概率重复使用锁(饥饿问题)
,其他线程会长时间得不到资源,会导致步伐运行效率不高,这时间可以使用同步的方法来办理,就好比排队一样,排完队领完东西还要再领就得重新在队伍后面排队,这就叫
同步
同步的意义:
互斥可以包管安全性,但是安全不肯定合理高效
同步是包管安全的情况下,让代码变得合理和高效。
起首我们先来了解对应接口:起首来介绍同步的初始化,看图:
可以发现,他和mutex的初始化是一样的,可以全局初始化也可以局部初始化,在全局使用初始化可以不用调用init和destory函数。
下一个接口,让指定的线程在指定的环境变量等待,假如别人不唤醒就一直等。
signal接口,可以唤醒在特定条件变量下的一个线程:
broadcast可以唤醒特定条件变量下指定的所有线程。
条件变量是一个用来进行线程同步的特性,内部要维护线程队列。
下面利用之前的抢票代码来做线程同步的接口训练:
可以看到,我先把票数设为零,线程都会去wait这里等待:
可以看到线程都在阻塞等待,这时间我们可以通过放票然后唤醒线程的方式来抢票:
可以看到线程被唤醒但是没执行,是因为在wait那里会重新申请和释放锁,就相当于已经有锁了但是又去申请锁,代码就会被挂起,这个后面细讲,在while那里再次解锁来让我们看到测试结果先:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
美食家大橙子
论坛元老
这个人很懒什么都没写!
楼主热帖
【计算机视觉】图像检索
面了个腾讯拿28k跳槽出来的,真正见识 ...
全面数字化时代,国有大型银行如何走好 ...
MySQL实战45讲 11
【大话云原生】负载均衡篇-小饭馆客流 ...
K8S 性能优化 - OS sysctl 调优
【kotlin】第一天
解决Mac下腾讯会议无法使用OBS等虚拟摄 ...
【docker专栏2】CentOS操作系统安装Doc ...
Python入门自学进阶-Web框架——14、Dj ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
运维.售后
Postrge-SQL技术社区
快速回复
返回顶部
返回列表