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