求助:无死锁的两段锁协议(2PL)如何用C实现呢?
看了很多资料还是不太明白,可能是我愚钝吧,希望大侠指点一二,谢谢!~~
具体算法是这样的:
1.结点加锁管理器的数据结构:
(1)描述该结点锁序的双向队列PQF: 队列的每个结点为一结构类型,成员有文件名、写(Lw)或读锁 (Lr) 标记以及前向和后向指针,其头结点的两个指针分别指向队列的第一个元素和最后一个元素;
(2)描述每个事务锁序的队列TiQF:结点描述同上。
2.算法描述:当事务Ti要求对该结点的某个文件F加锁时
(1)取出TiQF的最后一个元素的文件名Ft、以及锁类型描述(Lw或Lr);
(2)以Ft和F分别扫描队列PQF,若F位于Ft之前,则转(5)否则转(3);
(3)若PQF队列中没有F,则将对F的加锁插入到PQF和TiQF的队尾;
(4)若本次对F的加锁是共享锁(本次申请读而PQF中的锁亦为读锁),则将本次加锁插入到TiQF的队尾;否则Ti等待;(5)事务Ti回滚,即取消事务的所有请求,恢复事务的原始状态,并从PQF队列中删除该事务的所有加锁(原有的其它锁序不变)。
希望大侠赐教~~~小弟C语言不是很懂