+ -
当前位置:首页 → 问答吧 → 信号灯的问题_高手请进, 没有高手?

信号灯的问题_高手请进, 没有高手?

时间:2010-07-31

来源:互联网

本帖最后由 keneth2078 于 2010-07-31 16:47 编辑

对于posix的信号量
观点A:
  1。 A线线程通过sem_wait()取得信号灯,会将该信号灯的值减去1, 如果减去1的值恰好等于0,然后就一直占有改信号灯资源。
  2.   这时假设使用sem_post()增加信号灯的值,使该值大于0,比如是1,2,等等,那么其他正在等待改信号灯的线程获得运行的机会。
  3.   如果这时除了A线程外,没有其他线程等待,A线程仍然获得该信号灯,也就是说sem_post()增值是没有意义的。

以上的都对吗?

观点B: sem_post()在linux是使用signal的异步通知机制通知其他线程有效的, 这样sem_post, sem_wait, 就是mutex与event的结合,而且使用起来更简单。  请问对吗?

作者: keneth2078   发布时间: 2010-07-31

回复 keneth2078

我对linux信号量不怎么熟悉:
我是这样认为的:
信号量应该分为资源信号量(初始值表示系统中的资源数目,一般多个执行流时使用),互斥信号量(初始为1,一般两个执行流时使用)
sem_wait p 原语 sem_post v 原语  都必须是原子操作,就是if(sem-- < 0) hang();关中断情况。。。。
A观点:
(1)只能说A执行流,可以使用对应资源,如果是互斥就可以进入临界区
(2)对
(3)当然是有意义的,下次A在调用sem_wait,如果不加1,就被挂起,一直等待下去

B观点:
这个是你自己猜测的吧?不可能使用信号,而且也没有必要是用,只要把挂起队列中的进程控制块,放入就绪队列参与调度就可以了

好好看看操作系统原理

作者: lyyunfei   发布时间: 2010-08-02

相关阅读 更多