Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti
Il Lenovo LOQ 15i Gen 10 (15IRX10) offre prestazioni convincenti grazie al Core i7-13650HX e alla RTX 5060 Laptop a 100W, mantenendo un prezzo competitivo tra 1100 e 1300 euro. Costruzione solida, buon display e ampia espandibilità lo rendono una scelta equilibrata per chi cerca un notebook gaming accessibile ma moderno.
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-08-2011, 10:38   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
[C/C++] Teorema del campionamento

ciao,
siccome ho scritto un programma che in definitiva è un campionatore, mi chiedevo se il teorema del campionamento è usabile anche nel mio caso.

Ho un thread che scansiona le porte di un apparato collegato via ethernet e riempe un array di 1024 byte.

Un secondo thread verifica se qualcuno dei suoi bit ha cambiato di stato: mi interessano i singoli bit, se a zero oppure ad uno.

Un terzo thread resta in attesa del secondo e se c'è qualcosa da scrivere su disco viene risvegliato.

Ho notato che i tempi di esecuzione tra i vari thread in windows XP sono dell'ordine di 1/3 millisecondi e quindi del tutto trascurabili per i miei scopi.

La domanda: se il dispositivo più veloce cambia il suo stato ogni 500 millisecondi ed io eseguo il primo thread ogni 250 millisecondi è garantito che riesco a catturare in modo preciso lo stato di tutti i bit dell'apparato?

E' un dubbio un pò forse banalotto ma non avendo esperienza vi chiedo conferme soprattutto in quanto ho verificato che lo scheduler di windows XP è veramente NON deterministico.

grazie 1000

Ultima modifica di misterx : 01-08-2011 alle 11:29.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 10:59   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da misterx Guarda i messaggi
La domanda: se il disositivo più veloce cambia il suo stato ogni 500 millisecondi ed io eseguo il primo thread ogni 250 millisecondi è garantito che riesco a catturare in modo preciso lo stato di tutti i bit dell'apparato?
Non ti serve il teorema del campionamento.
Se agisci cosi' ovviamente riuscirai a catturare il cambio di stato di un bit con "al piu'" 250 millisecondi di ritardo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 11:22   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Non ti serve il teorema del campionamento.
Se agisci cosi' ovviamente riuscirai a catturare il cambio di stato di un bit con "al piu'" 250 millisecondi di ritardo.
quindi nel mio caso ritardare il secondo thread non servirebbe a nulla?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 11:40   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da misterx Guarda i messaggi
quindi nel mio caso ritardare il secondo thread non servirebbe a nulla?
Non capisco cosa significa "servire". Servire a cosa?

Se ogni segnale cambia al massimo ogni 500ms, e tu campioni ogni 250ms, non perderai alcuna informazione, ovvero avrai tutte le informazioni che ti servono, ma riceverai un cambio di segnale con un po' di ritardo, al piu' 250ms.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 11:48   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Non capisco cosa significa "servire". Servire a cosa?

Se ogni segnale cambia al massimo ogni 500ms, e tu campioni ogni 250ms, non perderai alcuna informazione, ovvero avrai tutte le informazioni che ti servono, ma riceverai un cambio di segnale con un po' di ritardo, al piu' 250ms.
il ritardo lo introduco per evitare di usare la CPU al 100%. Introducendo ritardi di 250 millisecondi, la CPU può dedicare il suo tempo a fare altro però il dubbio era se riuscivo ugualmente ad accorgermi che un bit era cambiato.

Ho notato che se calcolo il tempo di cambiamento di stato, per uno stesso bit, il tempo totale di variazione che leggo a volte è di 500 ms ed altre 750 ms, come se venissero sommati i 250 ms di attesa del secondo thread.

Continuando a diminuire il tempo di attesa del secondo thread sino a 5 ms la differenza rispetto ai 500 ms del cambiamento di stato sull'apparato si assottiglia, solo a volte leggo anzichè 500 ms, 516 ms

Ultima modifica di misterx : 01-08-2011 alle 11:59.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 12:38   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da misterx Guarda i messaggi
La domanda: se il dispositivo più veloce cambia il suo stato ogni 500 millisecondi ed io eseguo il primo thread ogni 250 millisecondi è garantito che riesco a catturare in modo preciso lo stato di tutti i bit dell'apparato?

grazie 1000
Dato che stiamo parlando di sistemi operativi dotati di memoria virtuale non c'è garanzia che il thread venga risvegliato esattamente ogni 250 ms e che riesca a leggere i dati in tempo. Nel caso più catastrofico potrebbero verificarsi dei PageFault a cascata che rallentano l'esecuzione.

In ogni caso le periferiche generalmente hanno un buffer pertanto anche se la lettura arrivasse in ritardo dovresti trovare tutto.
Per riprova fai una lettura ogni 750ms, dovresti riuscire a leggere tutto quello che è stato inviato in precedenza.

Ma hai veramente necessità di uno sleep? Potresti semplicemente avere un thread che legge in continuazione dal socket con letture bloccanti (pertanto il thread rimane fermo nel caso in cui non ci siano dati in arrivo) e solleva eventi. Questi eventi verranno intercettati da una classe che conosce il protocollo di comunicazione e interpreta quando è arrivato un intero pacchetto logico di dati che a sua volta genererà altre azioni a seconda di quello che devi fare.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 12:52   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Dato che stiamo parlando di sistemi operativi dotati di memoria virtuale non c'è garanzia che il thread venga risvegliato esattamente ogni 250 ms e che riesca a leggere i dati in tempo. Nel caso più catastrofico potrebbero verificarsi dei PageFault a cascata che rallentano l'esecuzione.

In ogni caso le periferiche generalmente hanno un buffer pertanto anche se la lettura arrivasse in ritardo dovresti trovare tutto.
Per riprova fai una lettura ogni 750ms, dovresti riuscire a leggere tutto quello che è stato inviato in precedenza.

Ma hai veramente necessità di uno sleep? Potresti semplicemente avere un thread che legge in continuazione dal socket con letture bloccanti (pertanto il thread rimane fermo nel caso in cui non ci siano dati in arrivo) e solleva eventi. Questi eventi verranno intercettati da una classe che conosce il protocollo di comunicazione e interpreta quando è arrivato un intero pacchetto logico di dati che a sua volta genererà altre azioni a seconda di quello che devi fare.

nella mia situazione ho un thread che legge dati da ethernet e riempie un array di 1024 byte ogni tot millisecondi, questo perchè io non posso sapere quando cambia lo stato dei bit dell'apparato; questo è un compito che spetta al mio programma come spetta anche calcolare per quanto tempo è rimasto a zero oppure a uno ognuno dei suoi bit.

Siccome non so ogni quanto cambiano di stato i tali bit, ecco l'esigenza di uno sleep che liberasse la CPU per altri programmi, altrimenti avrei un uso della CPU pari al 100%

Ultima modifica di misterx : 01-08-2011 alle 12:54.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:01   #8
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Come dice tomino non hai nessuna garanzia sulle temporizzazioni e quindi sulla deadline del thread che effettua la lettura. Anche se vai 100x più veloce prima o poi si potrebbero creare una serie di eventi che farà saltare il ciclo di lettura.
Se non ti ho convito basta immaginare una semplice operazione di I/O su disco di una primitiva di sistema con massima priorità, se dura più di 500ms sei "fritto". (Ho ipotizzato uno scheduler di tipo prioritario ma si può fare lo stesso con uno di time sharing).
A questo punto bisogna verificare se per te il salto di un ciclo di lettura è catastrofico oppure no, ovvero se si sta parlando di processi (nel tuo caso thread) di tipo hard o soft.
Poiché quello che a te interessa è la schedulazione di task periodici di una applicazione real-time, ti consiglio di guardare i seguenti standart per lo sviluppo di applicazioni real-time:
rt-posix
osek
apex
uITRON

Buona lettura.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:04   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Prova ad usare i Multimedia Timer invece che quelli forniti dal Framwork, sembrano essere piu' precisi.

http://www.softwareinteractions.com/...er-from-c.html

Io organizzerei cosi', il thread che legge la porta Ethernet appende i 1024 risultati in un List<byte[]>, ogni immagine.
quello che legge i risultati parte dal presupposto che ognuno dei byte[] e' spiazzato di esattamente 500ms, e non parte ricaclolando i tempi, ma li da gia' per spiazzati esattamente quanto impostato dal timer di lettura.
Windows non e' come detto un sistema operativo real time, ma questi multimedia timer sembrano essere sufficientemente precisi.

Dai anche un'altra priorita' al tuo processo, per favorirlo nelle schedulazioni.

Codice:
System.Diagnostics.Process.GetCurrentProcess().PriorityClass =
System.Diagnostics.ProcessPriorityClass.High;
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 01-08-2011 alle 13:06.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:05   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da misterx Guarda i messaggi
Ho notato che se calcolo il tempo di cambiamento di stato, per uno stesso bit, il tempo totale di variazione che leggo a volte è di 500 ms ed altre 750 ms, come se venissero sommati i 250 ms di attesa del secondo thread.
come già detto da gugoXX:
Quote:
Originariamente inviato da gugoXX
Se ogni segnale cambia al massimo ogni 500ms, e tu campioni ogni 250ms, non perderai alcuna informazione, ovvero avrai tutte le informazioni che ti servono, ma riceverai un cambio di segnale con un po' di ritardo, al piu' 250ms.
A) quando il thread lettore rileva un tempo di cambiamento di 500 ms significa che è stato risvegliato dalla sleep e quindi ha effettuato la lettura subito dopo che il valore nel dispositivo è stato cambiato (cambia appunto ogni 500 ms).

B) quando invece rileva un tempo di cambiamento di 750 ms (500 + 250) significa che è stato risvegliato dalla sleep appena prima della successiva mutazione del valore nel dispositivo, quindi la leggerà dopo la prossima sleep, tra 250 ms (il ritardo si accumula rispetto al tempo rilevato all'ultima lettura).

Quote:
Originariamente inviato da misterx Guarda i messaggi
Continuando a diminuire il tempo di attesa del secondo thread sino a 5 ms la differenza rispetto ai 500 ms del cambiamento di stato sull'apparato si assottiglia, solo a volte leggo anzichè 500 ms, 516 ms
Come sopra, nel caso A leggi 500, nel caso B leggi 516 ms anche se al più dovrebbe essere (500 + 5 = 505) per via del discorso che abbiamo fatto in un altro thread circa la granularità del timer di sistema in Windows di circa 16 millisec (o almeno è quello che penso succeda).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 01-08-2011 alle 13:11.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:06   #11
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da starfred Guarda i messaggi
Come dice tomino non hai nessuna garanzia sulle temporizzazioni e quindi sulla deadline del thread che effettua la lettura. Anche se vai 100x più veloce prima o poi si potrebbero creare una serie di eventi che farà saltare il ciclo di lettura.
Se non ti ho convito basta immaginare una semplice operazione di I/O su disco di una primitiva di sistema con massima priorità, se dura più di 500ms sei "fritto". (Ho ipotizzato uno scheduler di tipo prioritario ma si può fare lo stesso con uno di time sharing).
A questo punto bisogna verificare se per te il salto di un ciclo di lettura è catastrofico oppure no, ovvero se si sta parlando di processi (nel tuo caso thread) di tipo hard o soft.
Poiché quello che a te interessa è la schedulazione di task periodici di una applicazione real-time, ti consiglio di guardare i seguenti standart per lo sviluppo di applicazioni real-time:
rt-posix
osek
apex
uITRON

Buona lettura.
ciao,
dopo innumerevoli prove so che XP non è nato per il real time però volevo riuscire lo stesso a quantificare i ritardi introdotti.

Il mio vincolo è scrivere su XP

Se ad esempio ho dei bit che cambiano di stato ogni 1,5 secondi anche XP va bene per effettuare tali misurazioni, ma con che grado di precisione forse dico, forse in più o meno 20 millisecondi.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:07   #12
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
edit*
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:10   #13
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Allora considera che prima o poi il worst case si verificherà.
Il mio consiglio è quello di scrivere il programma rispondendo alla domanda:
"se un thread fa una sleep di 2 secondi, cosa succede?"

E poi renderlo immune a questo tipo di eventi gestendo l'eccezione.

Un altro consiglio è quello di utilizzare la temporizzazione (la sleep) su un solo thread e poi (attraverso sezioni critiche/monitor etc. etc.) gestire gli altri di conseguenza.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:11   #14
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
come già detto da gugoXX:

A) quando il thread lettore rileva un tempo di cambiamento di 500 ms significa che è stato risvegliato dalla sleep e quindi ha effettuato la lettura subito dopo che il valore nel dispositivo è stato cambiato (cambia appunto ogni 500 ms).

B) quando invece rileva un tempo di cambiamento di 750 ms (500 + 250) significa che è stato risvegliato dalla sleep appena prima della successiva mutazione del valore nel dispositivo, quindi la leggerà dopo la prossima sleep, tra 250 ms.


Come sopra, nel caso A leggi 500, nel caso B leggi 516 ms anche se al più dovrebbe essere (500 + 5 = 505) per via del discorso che abbiamo fatto in un altro thread circa la granularità del timer di sistema in Windows (o almeno è quello che penso succeda).
scusa ma detto così sembrerebbe che io stia calcolando solo il tempo di mandata in esecuzione dei vari thread e non quello dei vari cambiamenti di stato
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:13   #15
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da starfred Guarda i messaggi
Allora considera che prima o poi il worst case si verificherà.
Il mio consiglio è quello di scrivere il programma rispondendo alla domanda:
"se un thread fa una sleep di 2 secondi, cosa succede?"

E poi renderlo immune a questo tipo di eventi gestendo l'eccezione.

Un altro consiglio è quello di utilizzare la temporizzazione (la sleep) su un solo thread e poi (attraverso sezioni critiche/monitor etc. etc.) gestire gli altri di conseguenza.
tra il secondo ed il terzo ad esempio ho usato un evento, difatti il terzo è legato al secondo da questo.

Tra il primo thread ed il secondo ho usato un semaforo per evitare inconsistenza di dati.

Il mio problema ora sono i tempi che sembrano legati ai vari sleep ed è ciò che vorrei evitare


Comunque credo di aver capito la tua idea: metto un evento anche tra il primo e secondo thread e lascio l'evento tra secondo e terzo così, quando il primo ha riempito l'array risveglia il secondo ed il secondo che lo interpreta se trova delle differenze risveglia il terzo; e tutto viaggia cone velocità settata nel primo

Ultima modifica di misterx : 01-08-2011 alle 13:18.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:15   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da misterx Guarda i messaggi
scusa ma detto così sembrerebbe che io stia calcolando solo il tempo di mandata in esecuzione dei vari thread e non quello dei vari cambiamenti di stato
Sì infatti.
Tu hai detto che hai introdotto la sleep solo per non occupare la CPU in maniera aggressiva.
Solo che così il thread lettore si atttiva e legge in un attimo restando dormiente (e cieco alle mutazioni nel dispositivo) per ben 250 millisecondi circa ogni volta.

Fai il contrario: il tuo thread lettore farà polling per 250 millis consecutivi per poi andare a nanna per, ad esempio, 20 millis.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:16   #17
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da misterx Guarda i messaggi
scusa ma detto così sembrerebbe che io stia calcolando solo il tempo di mandata in esecuzione dei vari thread e non quello dei vari cambiamenti di stato
Non i tempi di esecuzione, ma la frequenza di campionamento.
Se campioni la porta ogni 500ms, avrai sempre e comunque una speranza di precisione a multipli di 500ms, ma di sicuro non di meno.
Magari il segnale passa da 0 a 1, resta a 1 per 2589 ms e poi torna a zero, ma tu leggendo la porta ogni 500ms penserai che sara' rimasto attivo per 3000ms, se ti va comunque bene. Non hai modo di raggiungere una precisione maggiore se non campionando la porta piu' frequentemente.

Evita di aggiungere altri errori in cascata. Leggi ogni 500ms, salva tutto (anche solo in memoria), e processa in seguito cio' che hai letto.
Questo se non ti serve reagire immediatamente ad un cambio di stato per fare altro ovviamente, il che non e' chiaro.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:23   #18
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
*edit

Ultima modifica di misterx : 01-08-2011 alle 13:30.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:33   #19
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Sì infatti.
Tu hai detto che hai introdotto la sleep solo per non occupare la CPU in maniera aggressiva.
Solo che così il thread lettore si atttiva e legge in un attimo restando dormiente (e cieco alle mutazioni nel dispositivo) per ben 250 millisecondi circa ogni volta.

Fai il contrario: il tuo thread lettore farà polling per 250 millis consecutivi per poi andare a nanna per, ad esempio, 20 millis.
però scusa,
se creassi io un thread che cambia un bit ogni 500 ms e volessi testare con un altro thread ogni quanto varia tale bit e trovassi sempre 500 ms cosa implicherebbe?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 13:44   #20
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
La parola sempre è un po' azzardata. Come si può intendere sempre?
1 minuto? 1 ora? 1 giorno? E' troppo relativo. Questo tipo di programmazione deve essere corretto dal punto di vista teorico.
Bisogna sempre ricondursi al worst case (che prima o poi si verificherà) e gestire il sistema di conseguenza.
Prova ad immaginare un sistema con 3 thread che eseguono questa operazione per 1000 volte:
TH1: Sleep(10); signal(TH2); wait();
TH2: Sleep(10); signal(TH3); wait();
TH3: Sleep(10); signal(TH1); wait();

Segnati l'orario di inizio e fine rimarrai molto sorpreso dal risultato
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
Il telescopio spaziale James Webb ha ril...
ESA: budget di 22,32 miliardi di euro pe...
Il rover Yutu-2 della missione cinese Ch...
Le pubblicità del frigorifero man...
Perso il segnale della sonda spaziale NA...
Una Xiaomi SU7 ha finito il suo parchegg...
Decine di associazioni contro i data cen...
Dongfeng batte Toyota e BYD: il suo moto...
Oltre NVIDIA: i server di Red Hat AI acc...
Grok diventa navigatore Tesla: Musk prom...
Broadcom/VMware e Siemens continuano a l...
NIO lancia il brand Firefly anche in Gre...
Trump annuncia una legge nazionale sull'...
Intel Arc B770: la scheda appare in un d...
Le Big dell'AI e Linux Foundation insiem...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v