Re: Jak bezpecne inicializovat semafor?

Frantisek Boranek fboranek na kerio.com
Středa Prosinec 1 19:18:19 CET 2010


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
  _______________________________________________
  Linux mailing list
  Linux na linux.cz
  http://www.linux.cz/mailman/listinfo/linux
  
    


Další informace o konferenci Linux