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

 

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