操作系统之信号量机制以及使用信号量实现进程(线程)同步和互斥

1.同步和互斥:

同步(直接制约关系):指的是完成同一任务的伙伴进程间,因需要协调它们的工作而等待、传递信息等。(z(进程1)和m(进程2)需要完成买东西的任务,z把钱给了m,m才能去买东西。)

互斥(间接制约关系):指的是两个进程因需要同一个互斥资源(资源只能给一个进程使用)而产生的制约关系。(z(进程1)和m(进程2)都需要使用打印机,只能z用完才能给m。)

2.信号量机制

信号量机制包括信号量和P、V操作。

(1)信号量S是一个整型变量(信号量可以看做是资源)。

(2)    P操作就是当S的值大于等于1时,让信号量S的值减1(S=S-1);当信号量的值小于0时,需要等待其它进程操作,使得S的值大于等于1。(可以理解为,没有资源就不可以执行程序)。

 (3)  V 操作就是讲S的值加1;(S=S+1)(可以理解为使用完释放资源)。

3.使用信号量实现进程(线程)互斥

假设有信号量mutex,我们设置它的初始值是1;(mutex = 1表示刚开始资源的数量为1)

假设有两个线程:线程1和线程2,使用以下方法实现互斥:

线程1:
P(mutex);//初始时mutex的值为1,因此这条操作会执行mutex = mutex-1;现在mutex = 0;
f1();
V(mutex);//在执行这个之前mutex=0。这条操作执行mutex = mutex+1;现在mutex = 1;

线程2:
P(mutex);//当在执行f1()的时候,mutex的值为0,因此处于等待资源状态,等到f1()执行完,mutex=1,可执行f2();
f2();
V(mutex);

上面的方法,使得每次只有一个进程(线程)可以执行。

4.使用信号量实现进程(线程)同步:

假设有信号量synch,我们设置它的初始值是0;(synch = 0表示刚开始资源的数量为0)

假设有两个线程:线程1和线程2,使用以下方法实现同步:

线程1:
f1();
V(synch);//在这之前synch的值为0,执行这个操作后synch=1;

线程2:
P(synch);//在不执行f1()之前,synch=0,等待资源。执行完线程1,synch=1可以执行f2();
f2();

上边的操作可以实现进程(线程)之间的同步,使得f2()在f1()之后进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值