哲学家就餐(避免死锁)(多进程版)
生活随笔
收集整理的這篇文章主要介紹了
哲学家就餐(避免死锁)(多进程版)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
哲學(xué)家就餐(避免死鎖)(多進(jìn)程版)
哲學(xué)家就餐利用信號量在多進(jìn)程之間實(shí)現(xiàn)
下面展示一些代碼片段
運(yùn)行結(jié)果截圖:
可以看到程序運(yùn)行時(shí),進(jìn)程交替獲得信號量。
哲學(xué)家輪流拿到左右兩個(gè)筷子(兩個(gè)信號量)然后進(jìn)行就餐,用完就post釋放擁有的兩個(gè)筷子(兩個(gè)信號量),如果只獲得一個(gè)筷子(一個(gè)信號量),則放棄之前得到的一個(gè)筷子(信號量)。
【重點(diǎn)注意】:
直接將sem_t s[5]放在全局位置,試圖用于子進(jìn)程間共享是錯(cuò)誤的!應(yīng)將其定義放置與mmap共享映射區(qū)中。
進(jìn)程之間不能定義全局信號量,因?yàn)檫M(jìn)程間全局變量是讀時(shí)共享,寫時(shí)復(fù)制,所以我們可以利用mmap函數(shù)建立映射區(qū)來實(shí)現(xiàn)多進(jìn)程之間對信號量的操作。
使用方式:將s當(dāng)成數(shù)組首地址看待,與使用數(shù)組s[5]沒有差異。
總結(jié)
以上是生活随笔為你收集整理的哲学家就餐(避免死锁)(多进程版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英雄联盟 雪人骑士大战怎么打断
- 下一篇: 怎么在flex里面实现图片的3D翻转