Re: Jak bezpecne inicializovat semafor?

d.petr d.petr na post.cz
Pátek Prosinec 3 11:46:51 CET 2010


> ------------ 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



Další informace o konferenci Linux