1. Procese Windows; comunicaţii prin pipe şi IPC 2
1. Procese Windows; comunicaţii prin pipe şi IPC 2
1. Procese Windows; comunicaţii prin pipe şi IPC 2
- TAGS
- procese
- pipe
- www.cs.ubbcluj.ro
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 23 -<br />
valoareInitiala – specifică valoarea iniţială a semaforului; trebuie să fie mai mare sau<br />
egală decât 0 <strong>şi</strong> mai mică sau egală decât valoareMaxima.<br />
valoareMaxima –indică valoarea maximă pe care o poate lua semaforul <strong>şi</strong> trebuie să fie<br />
mai mare decât 0.<br />
numeSemafor –specifică numele semaforului.<br />
Funcţia întoarce un handle la semafor, care poate fi utilizat în thread-urile fii.<br />
valoareInitiala <strong>şi</strong> valoareMaxima sunt numere nenegative. Dacă numeSemafor<br />
este un string, atunci avem de-a face cu un semafor cu nume, iar dacă această valoare este<br />
NULL avem de-a face cu semafor anonim.<br />
Se observă, că spre deosebire de semafoarele Unix, în acest caz se impune o limită superioară<br />
a valorii acestora.<br />
Odată creat un semafor cu nume, se poate face deschiderea accesului la semafor de către un<br />
proces. Deschiderea se face cu OpenSemaphore, care are prototipul:<br />
HANDLE OpenSemaphore (DWORD modDeAcces,<br />
BOOL mostenire,<br />
LPCTSTR numeSemafor);<br />
modDeAcces –indică modul de acces la semafor <strong>şi</strong> poate lua una (combinaţii):<br />
SEMAPHORE_ALL_ACCESS, SEMAPHORE_MODIFY_STATE, SYNCHRONIZE.<br />
(aceste valori pot fi restricţionate <strong>prin</strong> atribute de securitate la creare).<br />
mostenire –atribut de moştenire: indică (pentru valoarea TRUE) dacă handlerul la<br />
semafor va fi moştenit în procesele fii<br />
Orice semafor windows este caracterizat <strong>prin</strong> starea lui, care poate fi una dintre următoatele:<br />
� setat sau semnalat atunci când valoarea semaforului este strict pozitivă;<br />
� nesetat sau nesemnalat atunci când valoarea este egală cu zero.<br />
Cresterea valorii unui semafor se face <strong>prin</strong> apelul:<br />
BOOL ReleaseSemaphore(HANDLE hSemafor,<br />
LONG valoareDeAdaugat,<br />
LPLONG adresaVechiiValori );<br />
hSemafor –specifică handlerul semaforului de incrementat.<br />
valoareDeAdaugat –indică valoarea cu care se incrementează valoarea curentă a<br />
semaforului.<br />
adresaVechiiValori –specifică adresa unde va fi memorată vechea valoare a<br />
semaforului.<br />
Dacă semaforul hSemafor are valoarea maximă (specificată la creare), atunci acest apel de<br />
incrementare eşuează. De asemenea, dacă se specifică o valoare negativă pentru parametrul<br />
valoareDeAdaugat, apelul eşuează.