首页 > 编程知识 正文

怎样查看linux信号量,信号与系统信号的运算

时间:2023-05-03 13:53:37 阅读:113415 作者:3735

关于应试学习指导书中激昂的鸡翅(操作系统)中信号量的问题,我个人认为还有简化答案的余地,所以进行了讨论,但是因为不喜欢和激昂的鸡翅高分牛学校前辈讨论的结果,所以贴上去重新考虑。

有一座桥。 南北有入口的出口。 (不画图) )。

1 .假设该桥一次只能行驶一辆车,尝试信号灯p、v操作实现交通管理。

2 .假设该桥不允许两辆车交叉,但允许同方向的多辆车同时通过(即桥上可以有多辆同方向行驶的车)。 尝试信号机的p、v操作实现桥面交通管理。

参考教科书的“答案”:

int countSN=0;

int countNS=0;

semaphore mutexSN=1;

semaphore mutexNS=1;

semaphore bridge=1;

StoN ()。

p(mutexsn );

if(countsn==0) ) ) )。

p (网桥);

计数;

v(mutexsn );

过桥;

p(mutexsn );

countsn----;

if(countsn==0) ) ) )。

v (网桥);

v(mutexsn );

}

NtoS () }

p(mutexns );

if (计数ns==0) ) ) ) )。

p (网桥);

计数Ns;

v(mutexns );

过桥;

p(mutexns );

计数NS-- -;

if (计数ns==0) ) ) ) )。

v (网桥);

v(mutexns );

}

首先,让我们肯定一下这个代码的实现。 这个好处是可读性强,容易理解。 缺点是过于肥大,没有简化。 对于不能去玩的人,他对这件事的认识会浮现在表面的文字标识上。 但我想探讨的是更合理或本质上更核心的部分:

我的问题是,在答案中countSN和countNS是否可以使用一个count。 一是探索其可能性,二是认为在两个计数上会肥大化。

虽然都强调了,bridge信号量可以实现互斥。 只有计数减少到0,才能重新定向。 否则,一方一直占领着bridge信号量。 转换方向后,count又从0开始,可以满足另一个方向的计数要求。 这样往返。

网上的一双童鞋对我说不行,但没有逻辑上的说服力。

对话如下。

我:

就像问题一样,从回答来看,好像有点肥大。 因为同时只能做NtoS或者StoN。 也就是说,如果改变方向,则count都为0。 那么,需要使用countSN和countNS两个计数吗? 还是我逻辑不好,忽略了什么? 我主要想知道这个,我什么都没想吗?

哈工大古玩:

主题中说只能同时单向开通,这里使用两个计数器是为了在这里考虑。 使用一个时,车辆可能会在两个方向上通过。

我:

如果是这样的话,bridge有什么用

哈工大古玩:

你还没明白我说的话。 brige是为了确保两个方向同时只开通一个,但假设你说的那样,用一个count来表示countsn和countns,表面上看起来是相通的,这里有一个问题。 countsn和countns原本是用来计数两个方向的车辆的。 如果有一个事实,我认为这本身是必要的

我需要两个计数器来计数两个方向,为什么能简化为一个?

我认为他的想法有几个角度,

一、他觉得我想得太简单了,南北count为什么一样? 那是不是计算混乱了? 原本countSN和countNS分别表示南北方向开通。 如果不区分使用两个信号量的话,南北就不能互斥了~~~正如文字所示,他确实是这么想的。

第二,他认为那个countSN或countNS本身就是过桥车辆,但我想的是,这两个只是信号量,区分过桥是从南到北还是南,其实是由StoN (和NtoS )的方法决定的,StoN

很明显,这个工具是为了帮助控制bridge信号量。 基于count完成两个if语句,占用bridge,释放bridge。 既然bridge信号量只能迁移到count==0的另一个进程,则两个进程是互斥的,count不能同时计数到两侧。 也就是说可以用于再利用

反正我觉得他的想法是正确的~! 我不理解我错在哪里,所以别说是可读性问题。

是人际沟通障碍,还是立场差异太大,我不会太吐槽,但如果我错了也没关系的话,希望有领导的指出,有所进步。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。