sto usando la funzione QueryPerformanceCounter() per avere una lettura precisa dei tempi di esecuzione del mio codice.
Esso è costituito di 3 thread:
- produttore
- consumatore
- scrittore
Produttore e consumatore condividono un array che però viene "bloccato" da un mutex allo scopo di evitare incosistenza dei dati.
Per non appesantire troppo l'argomento lo pseudocodice è il seguente:
//PRODUTTORE
t1=QueryPerformanceCounter() // inizio misurazione
semaforo_rosso // così nessun altro può usare l'array sino al completo riempimento
riempi_array()
semaforo_verde // rilascio il semaforo per il thread consumatore
sleep(500) // lascio spazio agli altri thread
mi si perdonino le imprecisioni ma tale pesudocodice serve solo per far capire come lavora il codice, quindi t1=QueryPerformanceCounter() mette in t1 il tempo iniziale
//CONSUMATORE
semaforo_rosso // così nessun altro può usare l'array sino al completo riempimento
usa_array()
setta_evento()
semaforo_verde // rilascio il semaforo per il thread produttore
sleep(500) // lascio spazio agli altri thread
//SCRITTORE
attesa_evento
t2=QueryPerformanceCounter() // fine misurazione e stampa di t2-t1
scrivi_array()
sleep(500)
tra i thread produttore e scrittore mi aspettavo tempi dell'ordine dei 500 ms invece vedo sempre tempi dell'ordine di, alcuni esempi:
1.1 1, (1000) [[[16,9099704012661]]]
10.1 1, (1500) [[[77,5355527029273]]]
1.1 0, (500) [[[16,9239386570081]]]
12.3 0, (1500) [[[77,5456098470616]]]
0.6 0, (1500) [[[16,892649764146]]]
8.2 1, (500) [[[79,5279847019663]]]
0.6 1, (500) [[[16,8954434152944]]]
tra le quadre i tempi rilevari tra t2-t1 che non mi spiego
grazie
p.s.
spero si capiscano i miei dubbi