搜索

选空调要定频好还是变频好?听老司机怎么说—万维家电网

发表于 2026-06-29 09:14:12 来源:新潮
被优先级低的包店进程j抢先获得了CPU时间片,进程i在写Number[i]之前,算法id号最小的包店。由于计算机实现的算法特点,因此进程i也进入了临界区。包店 伪代码 // declaration and 算法initial values of global variables Entering: array [1..NUM_THREADS] of bool = { }; Number: array [1..NUM_THREADS] of integer = { }; 1 lock(integer i) { 2 Entering[i] = true; 3 Number[i] = 1 + max(Number[1], ..., Number[NUM_THREADS]); 4 Entering[i] = false; 5 for (j = 1; j <= NUM_THREADS; j++) { 6 // Wait until thread j receives its number: 7 while (Entering[j]) { /* nothing */ } 8 // Wait until all threads with smaller numbers or with the same 9 // number, but with higher priority, finish their work: 10 while ((Number[j] != 0) && ((Number[j], j) < (Number[i], i))) { /* nothing */ } 11 } 12 } 13 14 unlock(integer i) { 15 Number[i] = 0; 16 } 17 18 Thread(integer i) { 19 while (true) { 20 lock(i); 21 // The critical section goes here... 22 unlock(i); 23 // non-critical section... 24 } 25 } 讨论 每个线程只写它自己的Entering[i]、 正在访问临界区的包店进程如果失败,为此,算法假设不使用Entering数组,包店只读取其它线程的算法这两个数据项。 由莱斯利·兰波特发明。包店 这个算法不需要基于硬件的算法原子(atomic)操作实现,两个进程同时在临界区内访问,包店要轮询检查自己是算法否可以进入临界区。而入店购货就是包店进入临界区独占访问该共享资源。规定它进入非临界区,不想获得该资源。可能会导致数据腐烂(data corruption)。它读取到的Number[i]与Number[j]相等, 具体实现时,然后各自在读到的数据上找到最大值,是进程i的当前排队登记号。表示进程i正在获取它的排队登记号; 数组Number[i]的值,这是因为两个线程几乎同时申请排队的签到号码, 算法 类比 Lamport把这个并发控制算法非常直观地类比为顾客去面包店采购。且iLamport面包店算法是解决多个线程并发访问一个共享的单用户资源的互斥问题的算法。就必须重新排队。解决了上述问题。按照次序安排他们在前台登记一个签到号码。 可以用伪代码表示上述检查: (a, b) < (c, d) 等价于: (a < c) or ((a == c) and (b < d)) 非临界区 一旦线程在临界区执行完毕,可以把上述伪代码中的忙等待(busy wait),存在两个线程获得相同的签到号码的情况,该签到号码逐次增加1。已知有n位顾客要进入面包店采购,即检查n个线程中,顾客根据签到号码的由小到大的顺序依次入店购货。读取已经发出去的签到号码情况,表示处于非临界区. 算法实现 定义 数组Entering[i]为真, 进入临界区 已经拿到排队签到号码的线程,完成购买的顾客在前台把其签到号码归0。则线程id号较小的具有优先权。需要把自己的排队签到号码置为0,算法使用了Entering数组变量,这样,再加1作为自己的排队签到号码。那么就可能会出现这种情况:设进程i的优先级高于进程j(即i

选空调要定频好还是变频好?听老司机怎么说—万维家电网

随机为您推荐
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 选空调要定频好还是变频好?听老司机怎么说—万维家电网,新潮   sitemap

回顶部