Forum studentów Informatyki Zaocznej na Uniwersytecie Opolskim

Forum studentów Informatyki Zaocznej na Uniwersytecie Opolskim


#1 2010-01-15 17:50:49

Andrzej

Użytkownik

Zarejestrowany: 2008-10-13
Posty: 50
Punktów :   

C++ użycie semaforów

Żeby użyć semafora trzeba utworzyć uchwyt. Robi się to dokładnie tak jak deklaruje zmienną:
Piszemy:

HANDLE nazwa_semafora;

Aby utworzyć semafor musimy napisać:

nazwa_semafora = CreateSemaphore(NULL,4,4,NULL);

Znaczenie parametrów:
1-szy: NULL, tzn. semafor nie może być dziedziczony przez procesy potomne;
2-gi : wartość początkowa licznika ustawiona na 4;
3-ci : maksymalna wartość licznika 4 (chcemy "wpuścić" nie więcej niż 3 procesy)
4-ty : nazwa, ale ja zawsze daję NULL, bo nie za bardzo mi to działa

Trzeba zwrócić uwagę, żeby przypadkiem semafor nie został użyty zanim go utworzymy.

Używanie semafora w wątku:

Aby wątek od razu zajmował semafor trzeba w funkcji:
void __fastcall Nazwa_Watku::Execute();
od razu na początku dopisać:

WaitForSingleObject(nazwa_semafora,INFINITE);

W efekcie jeśli semafor będzie wolny to wątek od razu zacznie wykonywanie, jeśli nie, to będzie czekał na zwolnienie semafora. Dzięki naszemu semaforowi możemy wykonywać jedynie max 4 wątki na raz.
Zanim wątek skończy pracę należy zwolnić semafor poleceniem:

ReleaseSemaphore(nazwa_semafora,1,NULL);

Cyfra 1 oznacza zwiększenie licznika semafora o 1.
Trzeba pamiętać, że w miarę jak semafor jest zajmowany, jego licznik się zmniejsza. Jeśli osiągnie 0 wtedy semafor jest całkowicie zajęty. 

To: WaitForSingleObject(nazwa_semafora,INFINITE); polecenie trzeba dopisać do każdego wątku którym ma się "zająć" semafor

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.thcbro.pun.pl www.aplikanciopole.pun.pl www.ninjanarutogra.pun.pl www.wymiar-bakugan.pun.pl www.uefa.pun.pl