Jak bezpecne inicializovat semafor?

d.petr d.petr na post.cz
Středa Prosinec 1 13:33:54 CET 2010


Dobrý den.
Chystám se použít semafory pro koordinaci přístupu ke sdílené paměti mezi procesy.
Představuji si to tak, že každý proces bude schopen odpovídající semafor vytvořit, případně se k vytvořenému připojit. Tedy nebude záležet na pořadí spouštění programů, libovolný z programů se eventuálně bude moci ukončit a znovu spustit, aniž by se to semaforu nějak dotklo.
Funkce semget, semop a semctl jsou mi snad jasné, ale vidím problém v počáteční inicializaci semaforu. Nikde jsem nenašel, že by se dal meziprocesový semafor vytvořit zároveň s inicializační hodnotou. A mezi vytvořením a inicializací jedním procesem už by mohl druhý proces začít semafor používat a inicializace by pak nedopadla dobře; po uvolnění semaforu druhým procesem by měl samafor stav vyšší, než žádoucí maximální.
Zatím mne napadlo to řešit třeba pomocí přístupových práv semaforu, využil bych je jen jako příznak, podle nich by procesy poznaly, jestli už je semafor k použití, nebo ne. Ale je to takový divný způsob - pseudosemafor v semaforu.
Máte někdo nápad na lepší řešení počáteční inicializace semaforu?

PM



Další informace o konferenci Linux