LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 869|回复: 4

多处理机环境下使用信号灯的问题

[复制链接]
发表于 2005-8-18 20:21:55 | 显示全部楼层 |阅读模式
两个进程

分别在不同的CPU上执行

同时使用P操作申请一个资源

是否会有竞态出现?
发表于 2005-8-19 08:16:22 | 显示全部楼层
不会.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-19 09:30:35 | 显示全部楼层
本人有个疑问:

如果用信号灯s代表一个资源,初值为1

进程1和进程2在不同的CPU上同时执行p(s)的操作来申请资源。

可能有这种情况出现:

进程1读到s的值为1;进程2再读到s的值为1;然后两个进程都认为资源可以使用。

这样两次p操作后s的值为0。而两个进程同时使用一个资源。

想请教一下多处理机下是怎样解决这个问题的?
回复 支持 反对

使用道具 举报

发表于 2005-8-19 09:56:07 | 显示全部楼层
CPU提供了基本的锁机制。
你看看下面的汇编代码。
static __inline__ void atomic_inc(atomic_t *v)
{
        __asm__ __volatile__(
                LOCK "incl %0"
                :"=m" (v->counter)
                :"m" (v->counter));
}

如果想了解更多,去http://www.linuxforum.net/forum/ ... t=&Board=cpu问.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-19 10:32:04 | 显示全部楼层
多谢了。。

我再仔细看看。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表