如何以 semaphore 進行資源的共用互斥鎖定

在 Unix 系統中,資源的共用機制,通常以檔案鎖最為常見,也最為容易使用,只要使用 flock() 即可對檔案進行 LOCK_SH (共享鎖定)、 LOCK_EX (互斥鎖定)。但是其他的資源就沒這麼方便,例如共享記憶體完全沒有提供鎖定功能,此時就必須借助其他的行程間通訊機制進行協調,例如「號誌」(semaphore)。

本文即在說明,如何以號誌實作一個如 flock() 具有 LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB 四種參數的「資源共用互斥鎖定函數」。