当前位置: 首页 > article >正文

4月11日作业修订

 A.这主要看你互斥锁锁的资源是那部分的,如果是进程内资源,则可以实现同一进程不同线程之间的互斥,而如果将共享内存作为互斥锁进行操作则可以实现不同进程之间的互斥。

B.这是必然的,加锁是为了防止数据的二义性

C.信号量同时使用的是共享资源的不同部分,因而不会导致数据的二义性

D.速度快,但是只能用于同一线程的进程之间

BC:条件变量和信号量都可以实现进程间的通知和唤醒,这是线程间同步实现的基础

AD:互斥锁和读写锁都是为了实现对共享安全访问操作的锁的技术,并不含有通知和唤醒的功能

 

条件变量提供了一个pcb队列以及阻塞和唤醒的接口实现同步,但是什么时候唤醒以及什么时候阻塞线程是由程序员控制的,而这个控制是需要一个共享资源来决定的,所以需要搭配上一个互斥锁来进行使用来保护这个共享资源的条件判断和操作

信号量提供一个pcb等待队列以及一个实现了原子操作的计数器,通过计数器来实现同步的条件判断,所以不需要这个互斥锁,原子操作本生就能避免这个数据二义性问题。

 条件变量进行同步的判断条件是这个共享资源本省,所以需要搭配互斥锁进行使用

条件变量被唤醒时,需要重新进行条件判断,因为有的线程卡在锁的地方,一个线程结束后,直接进入还是会导致数据的二意

需要两个条件变量,因为如果出现误唤醒的情况,两个对象,两个条件变量,分开唤醒

 


http://www.kler.cn/a/9383.html

相关文章:

  • 01:(手撸HAL+CubeMX)时钟篇
  • 群控系统服务端开发模式-应用开发-前端个人信息功能
  • Python 连接 Redis 进行增删改查(CRUD)操作
  • 微服务(二)
  • 24.11.13 Javascript3
  • HarmonyOS SDK下的实践与探索
  • 【Linux】基础IO_文件操作
  • Docker 部署Jira8.1.0
  • 安装torch\torch-geometric
  • Raft协议
  • MFC - 控件的消息和控件的事件(命令)有什么区别?
  • leetcode单词的个数
  • 憨批的语义分割重制版11——Keras 搭建自己的HRNetV2语义分割平台
  • stm32 esp01s Qt 巴法云平台控制小灯
  • C++模板基础(六)
  • 故障定级和定责
  • 处理机调度与死锁习题
  • 蓝桥杯第十四届省赛完整题解 C/C++ B组
  • Window常用命令
  • Dubbo架构整体设计
  • 小规模容器编排使用Docker Swarm不香么,用个锤子的kubernetes
  • Leetcode.2399 检查相同字母间的距离
  • webpack介绍
  • 三十四、java中的引用
  • react简单实现防抖和节流教程方法
  • 用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)