2.4.4 信号量的应用

1. 利用信号量实现进程互斥

  为使多个进程能互斥的访问某临界资源,只需为该资源设置一个互斥信号量mutex,并设置其初值为 1 ,然后讲个进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。

  • 利用信号量实现进程互斥,mutex作为互斥锁使用
semaphore mutex=1; //只有一个资源
void P1(void)
{
while(1)
{
P(mutex); //当 mutex < 0 时停止
critical section // 进入临界区
V(mutex);
}
}
void P2(void)
{
while(1)
{
P(mutex);
critical section
V(mutex);
}
}

(1)wait 和 signal必须成对出现

(2)缺少 wait 会导致系统混乱,不能保证对临界区资源的互斥

(3)缺少 signal 将会使临界资源永远不被释放,从而使因等待的资源阻塞进程不被唤醒


2. 利用信号量实现前趋关系(同步关系)——>(自主命题常考前趋图)

  为实现先后执行 ——> 这种前趋关系,只需要使进程P1和P2共享一个公用信号量S,其初值为0,将 signal 操作放在语句S1后面,而在S2语句前面插入 wait 操作。由于S被初始化为0,若P2先执行必定阻塞,只有在进程P1执行完S1、signal(S)后使S++,P2进程方能执行S2(在执行S2前先等待,故初值为0做wait操作)



前趋图要点:首先,你要知道该进程被谁阻塞;其次,你要知道要唤醒哪个进程;


2.4.5 管程机制(408出过2次选择,自主命题看学校)

1. 管程的定义(进程的秘书)

  用少量信息和对资源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节。

  一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据



1.1 管程四部分————> 类似C++中的类

  • 管程的名称;
  • 局部与管程的共享数据结构说明
  • 对该数据结构进行操作的一组过程
  • 对局部与管程的共享数据设置初值的语句

Monitor monitor_name //管程名
{
share variable declarations;
cond declarations; //条件变量
public:
void P1(){} //PV操作
void P2(){}
{initialization code;//初始化}
}

2.条件变量

  利用管程实现进程同步时,必须设置同步工具,如两个同步操作原语 wait 和 signal。

  当某进程通过管程请求获得临界资源而未能满足时,管程便调用 wait 原语使该进程等待,并将其排在等待队列上。仅当另一个进程访问完成并释放该资源后,管程才又调用signal原语,唤醒等待队列中的队首进程。



注意事项:

(1)管程对每个条件变量,都须予以说明,其形式为:condition x,y

(2)该变量应置于wait 和 signal 之前,可表示为X.wait 和 X.signal



例如:由于共享数据被占用而使调用进程等待,该条件变量形式为:condition nonbusy

wait 原语 ————> nonbusy.wait 或 cwait(nonbusy)

signal 原语 ————> nonbusy.signal

  • X.signal 操作的作用:重启一个被阻塞的进程,如果没有被阻塞进程,则X.signal操作不产生任何后果。这与信号量机制中的signal操作不同,这是由于信号量机制总要执行s=s+1操作,总会改变信号量的状态。

第二章 信号量及条件变量(三)——> 重点的更多相关文章

  1. Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句

    第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...

  2. QThread中的互斥、读写锁、信号量、条件变量

    该文出自:http://www.civilnet.cn/bbs/browse.php?topicno=78431 在gemfield的<从pthread到QThread>一文中我们了解了线 ...

  3. 【Qt开发】QThread中的互斥、读写锁、信号量、条件变量

    在gemfield的<从pthread到QThread>一文中我们了解了线程的基本使用,但是有一大部分的内容当时说要放到这片文章里讨论,那就是线程的同步问题.关于这个问题,gemfield ...

  4. 27 python 初学(信号量、条件变量、同步条件、队列)

    参考博客: www.cnblogs.com/yuanchenqi/articles/5733873.html  semaphore 信号量: condition 条件变量: event 同步条件:条件 ...

  5. Python:Day29 信号量、条件变量

    信号量:semaphore 信号量是用来控制线程并发数的.(理解:虽然GIL任意时刻都只有一个线程被执行,但是所有线程都有资格去抢,semaphore就是用来控制抢的GIL的数量,只有获取了semap ...

  6. 第二章 js数据类型和变量

    一.驼峰命名法 第一个单词首字母大写,如果有多个单词的话其他的单词首字母大写. eg:nickName 二.prototype现象 新的命名规范. 常用的:以下划线为首字母(变量为对象的私有成员变量) ...

  7. 《JAVA多线程编程核心技术》 笔记:第二章:对象及变量的并发访问

    一.基本概念1.安全的变量和不安全的变量2.脏读的理解3.锁重入:4.锁释放5.死循环:二.synchronized 的理解:三.synchronized 同步方法3.1 同步方法不具有继承性.3.2 ...

  8. Java多线程编程核心技术,第二章,对象和变量并发访问

    1,方法内部变量是线程安全的 2,实例变量非线程安全 3,synchronized是锁对象不是锁方法(锁对象是可以访问非synchronized方法,不可访问同个和其他synchronized方法 4 ...

  9. 《Java从入门到失业》第二章:Java环境(三):Java命令行工具

    2.3Java命令行工具 2.3.1编译运行 到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld.我们在某个目录下记事本,编写一段代码如下: 保存 ...

随机推荐

  1. 老猿学5G扫盲贴:推荐三篇介绍HTTP2协议相关的文章

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 5G中的服务化接口调用都是基于HTTP2协议的,老 ...

  2. 第11.18节 Python 中re模块的匹配对象

    匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...

  3. PyQt学习随笔:Model/View设计中支持View中展示数据的排序

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在model/view架构中,有两种方法可以实现排序,选择哪种方法依赖于底层Model.如果mode ...

  4. Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...

  5. CF1439C Greedy Shopping

    题解 尝试做一下,感觉是每次取一段前缀和,这样就相当于让我们证明在 \(a_i\le 10^{12}\) 时,不可能构造出隔一个取一个的情况(\(n=10^5\)). a[i]: 1, 2, 3, 5 ...

  6. Windows版 charles安装证书抓包网页HTTPS

    1.在Charles官网https://www.charlesproxy.com/download/下载,我这边下载的是免费体验版的. 2.安装好以后打开,配置Charles证书:选择 help--S ...

  7. Spring Session解决Session共享

    1. 分布式Session共享   在分布式集群部署环境下,使用Session存储用户信息,往往出现Session不能共享问题.   例如:服务集群部署后,分为服务A和服务B,当用户登录时负载到服务A ...

  8. Elasticsearch.Net

    今天使用Elasticsearch作开发,很简单的查询,就出现Elasticsearch.Net.UnexpectedElasticsearchClientException异常,看样子像是序列化的异 ...

  9. [日常摸鱼]bzoj1036 [ZJOI2008]树的统计Count

    听说后天会考x 省选居然还考模板题的么(好吧好像NOI也有考而且也是树剖-) 题意:一棵树,每个点有权值,三种操作:单点修改.求链上最大值.求链上权值和. 直接上模板. 我可能不会写单点修改的线段树了 ...

  10. [日常摸鱼]luogu3398仓鼠找sugar-树链剖分

    https://www.luogu.org/problemnew/show/P3398 题意:一颗$n$个点的树,$q$次询问两条链$(a,b),(c,d)$是否有交 树剖裸题orz 一开始的想法是求 ...