信号灯的问题_高手请进, 没有高手?
时间: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的结合,而且使用起来更简单。 请问对吗?
对于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观点:
这个是你自己猜测的吧?不可能使用信号,而且也没有必要是用,只要把挂起队列中的进程控制块,放入就绪队列参与调度就可以了
好好看看操作系统原理
我对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
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28