2011-10-07 38 views
0

我有一位創建共享內存區域的作者,我想確保讀者在作者準備好之前無法shm_open()該區域。我這樣做的做法是編寫者將shm_open在只讀模式。一旦該區域正確構建,我chmod()該文件。這很糟糕,我不能fcntl()文件描述符來更改權限。任何建議(短缺在該地區做一些可怕的同步?)共享內存:位置和鎖定策略

爲什麼是chmod()yucky?部分原因是沒有glibc代碼(暴露的是)告訴我共享內存區域在哪裏(例如/ dev/shm)。在glibc中有一些代碼可以查看坐騎,我不想複製它,但如果沒有人能給我比chmod()更好的解決方案,可能沒有選擇。

+1

這正是同步功能的用途。例如,該地區的進程共享互斥體就是完美的。 –

回答

0

而不是使用shm_open,你當然可以使用mmap - 這允許你在你選擇的目錄中使用一個文件(也許這是一個優化,把它放在一個ramdisc上)。

但是爲了解決鎖定問題,也許你應該在共享區域中使用一個互斥體,或者在(推)flock()該文件時使用互斥體。

但是,如果您試圖使其表現爲一個隊列,也許您應該使用更多隊列類型的IPC對象。