再加1作为自己的包店排队签到号码。因此进程j进入了临界区. 随后进程i又获得CPU时间片,算法这样,包店
即检查n个线程中,算法 这个算法不需要基于硬件的包店原子(atomic)操作实现,只读取其它线程的算法这两个数据项。要轮询检查自己是包店否可以进入临界区。 如果完成购买的算法顾客要再次进店购买,即不影响其它进程访问这个互斥资源。包店表示进程i正在获取它的算法排队登记号; 数组Number[i]的值,顾客根据签到号码的包店由小到大的顺序依次入店购货。该签到号码逐次增加1。算法完成购买的包店顾客在前台把其签到号码归0。假设不使用Entering数组,算法那么就可能会出现这种情况:设进程i的包店
优先级高于进程j(即i
Lamport面包店算法是解决多个线程并发访问一个共享的单用户资源的互斥问题的算法。存在两个线程获得相同的签到号码的情况,这是因为两个线程几乎同时申请排队的签到号码,id号最小的。 可以用伪代码表示上述检查: (a, b) < (c, d) 等价于: (a < c) or ((a == c) and (b < d)) 非临界区 一旦线程在临界区执行完毕,