Semafor (programovanie): Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
Nová stránka: : ''Pre ostatné použitia, pozri Semafor.'' '''Semafor''', v programovaní, je zabezpečená premenná (entita zachovávajúca hodnotu) alebo [[abstraktného dátovéh...
 
Riadok 16:
 
P(Semaphore s) // Získanie zdroja
 
{
 
wait until s > 0, then s := s-1;
 
/* musí byť [[atomické (programovanie)|atomické]] ak platí s > 0 */
 
}
 
 
V(Semaphore s) // Uvoľnenie zdroja
 
{
 
s := s+1; /* musí byť atomické */
 
}
 
 
Init(Semaphore s, Integer v)
 
{
 
s := v;
 
}
 
 
 
Všimnime si, že zvyšovanie premennej ''s'' nesmie byť prerušené a procedúra ''P'' nesmie byť prerušená ak ''s'' je väčšie od 0. Toto sa dá dosiahnuť pomocou špeciálnej inštrukcie [[test-and-set]] (ak to v danej architektúre [[inštrukčná sada]] podporuje) alebo (ak to je [[jednoprocesorový systém]]) sa dá zakázať [[prerušenie]] na zabránenie prepnutia procesu.
Řádek 72 ⟶ 56:
 
P(Semaphore s, integer howmany)
 
{
 
wait until s >= 0;
 
s := s - howmany; /* musí byť atomické */
 
wait until s >= 0;
 
}
 
 
V(Semaphore s, integer howmany)
 
{
 
s := s+howmany; /* musí byť atomické */
 
}
 
 
 
Na pochopenie, prečo je to lepšie ako jednoduché viacnásobné volanie P, uvažujme nasledovný problém. Povedzme, že máte množstvo N nejakého zdroja, napríklad zásobníkov pevnej dĺžky. Môžete chcieť mať inicializovaný semafor na hodnotu N na monitorovanie, ktorý zásobník je momentálne nepoužívaný. Keď si chce proces alokovať zásobník, zavolá P na semafore a dostane ho. Ak nie sú žiadne zásobníky voľné, bude čakať pokiaľ niektorý z iných procesov neuvoľní zásobník a vyvolá V na semafore.
Řádek 108 ⟶ 80:
 
Za povšimnutie stojí, že nie je nutné mať číslo na semafore rovné hodnote počtu voľných zásobníkov. Testovanie a čakanie na podmienke s >= 0 v P je nutné na zabezpečenie toho, aby pri pridávaní sa do čakacej fronty procesy nerušili ostatným požiadavky: proces nezmení hodnotu na semafore, pokiaľ nie je prvý vo fronte. V reálnej implementácii je to robené bez zobudenia procesu na zmenšenie hodnoty.
 
 
 
==Semafory v dnešnej dobe používané programátormi==