当前位置:首页 » 无线网络 » and型信号量

and型信号量

发布时间: 2021-03-01 15:16:20

『壹』 什么是记录型信号

所谓记录型信号量就是信号量是一个结构体的数据结构。其定义为:
Typedef struct{
int value;
struct process_control_block *list;
}semaphore;
该数据专结构中只有属两个分量,一个是一个整形变量value,表示某类资源可利用的数量;另一个是一个指针,是因该资源而被阻塞的进程构成的阻塞队列的首指针。

『贰』 信号量机制

《Operating Systems Design and Implementation》中Andrew S. Tanenbaum对信号量的描述和以前看过的教材有区别。但其核心思想是类似的。

以前的书上(包括网上不少帖子)是这么叙述的:

―――――――――――――――――――――――――――――――――――――

信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。

Dijkstra同时提出了对信号量操作的PV原语。

P原语操作的动作是:

(1)S减1;

(2)若S减1后仍大于或等于零,则进程继续执行;

(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

V原语操作的动作是:

(1)S加1;

(2)若相加结果大于零,则进程继续执行;

(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。

―――――――――――――――――――――――――――――――――――――

说明:要保证PV是原子操作,对于操作系统,只须在操作过程中关中断即可。

Andrew S. Tanenbaum对信号量的定义有所不同,其PV操作也有区别。

―――――――――――――――――――――――――――――――――――――

信号量是一个整数,其值不小于0。它表示被积累下来的唤醒操作数。

P原语操作的动作是:

(1) 检查S是否大于0。

(2) 若S>0,则S = S – 1;否则,执行P操作的进程将睡眠,并且此时P操作并未结束。

V原语操作的动作是:

(1)S = S + 1。

(2)如果一个或多个进程在该信号量上睡眠,无法完成先前的P操作,则有系统选择其中一个并允许它完成P操作。

――――――――――――――――――――――――――――――――――――――

Andrew S. Tanenbaum的观点认为:当S = 0时,P操作不会马上结束。其作用(S = S – 1)必须在该进程被唤醒后才能实现。

两种定义的区别是:

前者定义的PV操作都不会阻塞,而后者中P操作可能被阻塞。

前者的S的初值一般大于0,而后者中,S通常初值为0。

『叁』 信号量机制可以总结为三个要素,应该是哪些

《Operating Systems Design and Implementation》中Andrew S. Tanenbaum对信号量的描述和以前看过的教材有区别。但其核心思想是类似的。

以前的书上(包括网上不少帖子)是这么叙述的:

―――――――――――――――――――――――――――――――――――――

信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。

Dijkstra同时提出了对信号量操作的PV原语。

P原语操作的动作是:

(1)S减1;

(2)若S减1后仍大于或等于零,则进程继续执行;

(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

V原语操作的动作是:

(1)S加1;

(2)若相加结果大于零,则进程继续执行;

(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。

―――――――――――――――――――――――――――――――――――――

说明:要保证PV是原子操作,对于操作系统,只须在操作过程中关中断即可。

Andrew S. Tanenbaum对信号量的定义有所不同,其PV操作也有区别。

―――――――――――――――――――――――――――――――――――――

信号量是一个整数,其值不小于0。它表示被积累下来的唤醒操作数。

P原语操作的动作是:

(1) 检查S是否大于0。

(2) 若S>0,则S = S – 1;否则,执行P操作的进程将睡眠,并且此时P操作并未结束。

V原语操作的动作是:

(1)S = S + 1。

(2)如果一个或多个进程在该信号量上睡眠,无法完成先前的P操作,则有系统选择其中一个并允许它完成P操作。

『肆』 什么是信号量机制

信号量机制
目录
1摘要
2基本信息
(2)若S减1后仍大于或等于零,则进程继续执行; 信号量机制分 信号量集的定义:

基本信息

提出时间
1965年
1965年,荷兰学者Dijkstra提出了利用信号量机制解决进程同步问题,信号量正式成为有效的进程同步工具,现在信号量机制被广泛的用于单处理机和多处理机系统以及计算机网络中。

信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。

Dijkstra同时提出了对信号量操作的PV原语。

P原语操作的动作是:

(1)S减1;

(2)若S减1后仍大于或等于零,则进程继续执行;

(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

V原语操作的动作是:

(1)S加1;

(2)若相加结果大于零,则进程继续执行;

(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语行期间不允许有中断的发生。

信号量机制分 整型信号量机制、记录型信号量机制、and型信号量机制、信号量集。

整型信号量是一种最简单的信号量,主要用于解决并发程序互斥访问临界资源问题。

记号信号量在整型信号量的举出上进行了改进,让不能进入临界区的进程“让权等待”,即进程状态有运行转换为阻塞状态,进程进入阻塞队列中等待。

AND型信号量集是将进程在运行中所需要的临界资源全部一次性分配给进程,等进程用完后再全部一次释放。

信号量集的定义:

1.用s1、s2、...sn分别表示有n类裂解资源信号量;

2.用d1、d2、...dn分别表示进程需要的每类临界资源个数;

3.用t1、t2、...tn分别表示每类临界资源分给进程的下限值;

『伍』 利用AND型信号量解决哲学家进餐问题,要windows下的C/C++的完整源代码程序。(五个哲学家五只筷子)

// 哲学家进餐问题
#define WIN32_LEAN_AND_MEAN

#include <cstdio>
#include <cstdlib>
#include <Windows.h>

(LPVOID);

#define PHILOSOPERS 5

HANDLE chop_sticks[PHILOSOPERS];
HANDLE threads[PHILOSOPERS];

intmain(int argc,char** argv)
{
for(inti=0;i<DESKTOPHORZRES;++i)
chop_sticks[i]=CreateMutex(NULL,FALSE,NULL);

for(inti=0;i<PHILOSOPERS;++i)
threads[i]=CreateThread(NULL,
0,
PhilosoperThreadFunc,
(PVOID)i,
0,
NULL);

WaitForMultipleObjects(PHILOSOPERS,threads,TRUE,INFINITE);

returnEXIT_SUCCESS;
}

DWORD WINAPI PhilosoperThreadFunc(LPVOIDn)
{
inti=(int)n;
HANDLEmy_chop_sticks[2];
my_chop_sticks[0]=chop_sticks[i];
my_chop_sticks[1]=chop_sticks[(i-1>0)?i-1:PHILOSOPERS];
srand(GetTickCount());
while(1){
Sleep((rand()%8)*500+500);
printf("Philosopher #%d want to eat\n",i);
WaitForMultipleObjects(2,my_chop_sticks,TRUE,0);
printf("Philosopher #%d is eating\n",i);
ReleaseMutex(my_chop_sticks[0]);
ReleaseMutex(my_chop_sticks[1]);
printf("Philosopher #%d finished his dinner\n",i);
}
}

『陆』 15. 对于记录型信号量,在执行一次P操作时,信号量的值应当 ;在执行V操作时,信号量的值应当 。 。

对于记录型信号量,在执行一次P操作时,信号量的值应当 (C) ;在执行V操作时,信号量的值应当(B)

『柒』 什么是AND信号量

AND型信号量是指同时需要多个资源且每种占用一个资源时的信号量操作。即在一个专原语中申请整段属代码需要的多个临界资源,要么全部分配给它,要么一个都不分配给它。以避免当一段处理代码需要同时获取两个或多个临界资源时,出现由于各进程等待其余的临界资源,变成死锁的情况。

(7)and型信号量扩展阅读:

在AND型信号量中时,各个信号的次序并不重要,虽然会影响进程归人哪个阻塞队列,但是因为是采取原子操作方式,对资源全部分配或不分配,所以总有进程获得全部资源并在推进之后释放资源,因此不会死锁。

由于AND型信号量中一般信号在使用时的灵活性,因此通常并不成对使用Swait和Ssignal。为了避免死锁可一起申请所有需要的资源,但不一起释放。

『捌』 利用AND型信号量实现生产者-消费者问题的模拟

大哥,我让人画个图都给100分阿,你这才40,一个大程序阿!!在加点,我给你做

『玖』 计算机操作系统 And型信号量问题

AND同步机制的基本思想是:将进程在整个运行过程中需要的所有资源,一次性全部地分配回给进程,答待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源也不分配给它。
这样做的目的是为了避免死锁。
同时,And型信号量具有同步机制。
通俗的来讲就是,把资源全部分配给进程,当前进程全部执行完毕后收回,清空等待队列,然后唤醒所有进程,再度分配。
同步操作是And信号量的特性,没有为什么不能只唤醒第一个,因为它要同步,它要资源全部分配。

热点内容
网卡了的原因 发布:2021-03-16 21:18:20 浏览:602
联通客服工作怎么样 发布:2021-03-16 21:17:49 浏览:218
路由器画图 发布:2021-03-16 21:17:21 浏览:403
大网卡收费 发布:2021-03-16 21:16:50 浏览:113
路由器免费送 发布:2021-03-16 21:16:19 浏览:985
孝昌营业厅 发布:2021-03-16 21:15:54 浏览:861
网速增速代码 发布:2021-03-16 21:15:29 浏览:194
怎么黑光纤 发布:2021-03-16 21:14:54 浏览:901
端口增大 发布:2021-03-16 21:14:20 浏览:709
开机没信号是什么原因 发布:2021-03-16 21:13:45 浏览:645