Re: Jak bezpecne inicializovat semafor?
d.petr
d.petr na post.cz
Středa Prosinec 1 20:42:41 CET 2010
Tak sem_open () jsem v knížce pana Jelínka našel také, ale nějak jsem nabyl dojmu, že je použitelná jen v jádře, protože všechny návody, co jsem viděl, používaly semget () a spol. Dobře, zkusím použít. Děkuji.
PM
> ------------ Původní zpráva ------------
> Od: Frantisek Boranek <fboranek na kerio.com>
> Předmět: Re: Jak bezpecne inicializovat semafor?
> Datum: 01.12.2010 19:48:35
> ----------------------------------------
> Lze pouzit napr:
>
> mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
> int flags = (failIfExist) ? (O_CREAT | O_EXCL) : O_CREAT;
> sem_t *hSemaphore = sem_open(name.c_str(), flags, mode, initValue);
>
> vic v man sem_open
>
> Frantisek
>
> _____
>
> From: d.petr [mailto:d.petr na post.cz]
> To: Diskuse o Linuxu v cestine [mailto:linux na linux.cz]
> Sent: Wed, 01 Dec 2010 13:33:54 +0100
> Subject: Jak bezpecne inicializovat semafor?
>
> 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