Re: Jak bezpecne inicializovat semafor?

Frantisek Boranek fboranek na kerio.com
Pátek Prosinec 3 13:58:32 CET 2010


Pokud se nemylim tak nahrada SEM_UNDO v tomto API neni a neznam elegantni reseni. Dalsi vec, ktera by Vas mohla zajimat, ze semafor preziva i po ukonceni vsech procesu, pokud posledni z nich nezavola "sem_ulink". sem_unlik nemusi nastesti volat az posledni proces, ale lze ho zavolat v kazdem z nich po zavolani close. K fyzickemu odstraneni totiz dojse az po uvolneni vsemi procesy.

F.

  _____  

From: d.petr [mailto:d.petr na post.cz]
To: Diskuse o Linuxu v cestine [mailto:linux na linux.cz]
Sent: Fri, 03 Dec 2010 11:46:51 +0100
Subject: Re: Jak bezpecne inicializovat semafor?

> ------------ Původní zpráva ------------
  > Od: Frantisek Boranek <fboranek na kerio.com>
  > ----------------------------------------
  > 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
  
  Ještě jednou děkuji za navedení, skutečně se mi podařilo semafory tímto způsobem (nazývají to POSIXové API 2) rozchodit. Skoro všechny požadavky mám splněny, jen jeden ještě chybí: vstoupí-li program do kritické sekce (a zamkne si semafor) a uvnitř této sekce je násilně ukončen, zůstává semafor zamknutý (vynulovaný). "Staré" semafory System V měly ve funkci semop možnost příznaku SEM_UNDO, který zajistil odemčení semaforu po případném zboření procesu uvnitř kritické sekce (jestli jsem to pochopil správně). Existuje něco podobného i pro sem_open nebo sem_wait, nebo to budu muset ošetřit jinak (asi s využitím sem_timedwait a pak nějak pořešit)? Mně se nepodařilo náhradu SEM_UNDO najít.
  PM
  _______________________________________________
  Linux mailing list
  Linux na linux.cz
  http://www.linux.cz/mailman/listinfo/linux
  
    


Další informace o konferenci Linux