找回密码
 新注册用户
搜索
查看: 4008|回复: 3

[求助]求分布式同步中的Ricart算法的c程序实现?

[复制链接]
发表于 2004-11-8 00:00:00 | 显示全部楼层 |阅读模式
rt,给个思路就可以了,多谢各位大虾!
回复

使用道具 举报

 楼主| 发表于 2004-11-9 00:00:00 | 显示全部楼层
求大家给个思路吧,真的很急啊,拜托了!!
回复

使用道具 举报

发表于 2004-11-9 00:00:00 | 显示全部楼层
Ricart and Agrawla 算法
Ricart 等提出的分布式同步算法,同样基于Lamport 的事件排序,但又做了些修改,使每次访问共享变量时,仅需发送 2(N-1)个消息。 下面是对Ricart and Agrawla 算法的描述
(1)当进程Pi要求访问某个资源时,它发送一个Request(Ti,i)消息给所有其他进程。
(2)当进程Pj收到Request(Ti,i)消息后,执行如下操作:
●若进程Pj正处在临界区中,则推迟向进程Pi发出Reply响应;
●若进程Pj当前并不要求访问临界资源,则立即返回一个有时间邮戳的Reply消息;
●若进程Pj也要求访问临界资源,而在消息Request(Ti,i)中的邮戳时间早于(Tj,i),同样立即返回一个有时间邮戳的 Reply消息;否则,Pj保留 Pi发来的消息Request(Ti,i),并推迟发出Reply响应。
(3)当进程Pi收到所有其他进程发来的响应时,便可访问该资源。
(4)当进程释放该资源后,仅向所有推迟发来 Reply消息的进程发送Reply消息。</P><P>   该算法能够获得较好的性能:能够实现诸进程对共享资源的互斥访问;能够保证不发生死锁,因为在进程--资源图中,不会出现环路;不会出现饥饿现象,因为对共享资源的访问是按照邮戳时间排序的,即按照FCFS原则服务的;每次对共享资源访问时,只要求发2(N-1)个消息。下图说明了进程在访问共享资源时的状态转换:

当然这个算法也有一定的问题:第一,每个要求访问共享资源的进程,必须知道所有进程的名字,因此,一旦有新进程进入系统,它就将通知系统中所有进程。第二,如果系统中有一个进程失败,则必然会使发出Request消息的进程无法收到全部响应,因此,系统还应该具备这样的功能,即一旦某个进程失效,系统能将该进程的名字通知其他进程。

[ Last edited by 碧城仙 on 2004-12-21 at 10:19 AM ]
回复

使用道具 举报

发表于 2004-12-2 21:31:04 | 显示全部楼层
有源程序吗?
我想要呀`
谢谢!
回复

使用道具 举报

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

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2025-5-11 13:23

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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