ARRAY DI SEMAFORI
In certe applicazioni come ad esempio i programmi di simulazione in tempo reale
è necessario usare array di semafori. Per esempio per simulare il traffico in
un parcheggio a tre piani, ciascuno con 30 posti macchina, si crea un array di
tre semafori 30-ari. Evidentemente un' auto posteggerà nel primo posto
disponibile di un certo piano. La WaitForSingleObject in questo
caso dovrebbe sapere quale dei tre semafori è libero e questo non è possibile.
L'API di Windows mette in questo caso a disposizione la funzione WaitForMultipleObjects
WaitForMultipleObjects |
DWORD
WaitForMultipleObjects(
DWORD nCount,
const
HANDLE *lpHandles,
BOOL
bWaitAll,
DWORD
dwmilliseconds;
) |
- nCount
- lpHandles
- fWaitAll
- true: la funzione ritorna quando tutti i semafori dell'array sono
liberi.
- false: la funzione ritorna se uno dei semafori è libero restituendo
l'indice del semaforo libero
- dwMilliseconds
Quando ritorna normalmente, la funzione restituisce un valore compreso fra
WAIT_OBJECT_0 e WAIT_OBJECT_0 + nCount – 1
Per esempio nel caso di un array di tre semafori:
- se il semaforo 0 è
libero ritorna WAIT_OBJECT_0
- se il semaforo 1 è
libero ritorna WAIT_OBJECT_0 + 1
- se il semaforo 2 è
libero ritorna WAIT_OBJECT_0+2
Se più di un semaforo risulta libero, la funzione restituisce l'indice più
piccolo. Per es. se i semafori 1 e 2 sono liberi, restituisce 1.