misterx
11-08-2011, 08:21
ho implementato un programma con due thread il cui scopo è leggere dati da schede, verificare se tali dati sono cambiati e se lo sono, visualizzare i risultati.
Ero molto indeciso se scrivere tutto il programma in sequenza oppure adottare la strada dei thread per introdurre un certo parallelismo ed ho pensato: se il numero di schede da analizzare si limita ad una allora l'uso dei thread forse non è giustificabile ma se il numero di schede è maggiore di una allora l'uso dei thread trova la sua giustificazione. Per fare un esempio avrei che, in quanto io accedo alle varie schede attraverso indirizzo ip:
//caso senza thread
schede[]={192.168.80.10, 192.168.80.11, 192.168.80.20};
byte buffer[512];
num_schede=3;
for (int i =0; i< num_schede; i++ ){
buffer = leggischeda(schede[i]);
for( int u = 0; u < 512; u++){
if(buffer[u] == ...... ) se è cambiato qualcosa allora visualizza e salva
}
in questo scenario le altre schede attendono il termine dell'esecuzione della scheda che la precede
}
//caso con thread
schede[]={192.168.80.10, 192.168.80.11, 192.168.80.20};
byte buffer[512];
//thread lettore scheda
threadLettore(char *ip)
{
buffer = leggischeda(ip);
for( int u = 0; u < 512; u++){
if(buffer[u] == ...... ) se è cambiato qualcosa allora visualizza e salva
}
//thread visualizza e salva
prinft();
fprintf();
in questo secondo scenario nessuna scheda attende l'altra e tutto si muove in parallelo.
Vi pare un pensata valida?
grazie
Ero molto indeciso se scrivere tutto il programma in sequenza oppure adottare la strada dei thread per introdurre un certo parallelismo ed ho pensato: se il numero di schede da analizzare si limita ad una allora l'uso dei thread forse non è giustificabile ma se il numero di schede è maggiore di una allora l'uso dei thread trova la sua giustificazione. Per fare un esempio avrei che, in quanto io accedo alle varie schede attraverso indirizzo ip:
//caso senza thread
schede[]={192.168.80.10, 192.168.80.11, 192.168.80.20};
byte buffer[512];
num_schede=3;
for (int i =0; i< num_schede; i++ ){
buffer = leggischeda(schede[i]);
for( int u = 0; u < 512; u++){
if(buffer[u] == ...... ) se è cambiato qualcosa allora visualizza e salva
}
in questo scenario le altre schede attendono il termine dell'esecuzione della scheda che la precede
}
//caso con thread
schede[]={192.168.80.10, 192.168.80.11, 192.168.80.20};
byte buffer[512];
//thread lettore scheda
threadLettore(char *ip)
{
buffer = leggischeda(ip);
for( int u = 0; u < 512; u++){
if(buffer[u] == ...... ) se è cambiato qualcosa allora visualizza e salva
}
//thread visualizza e salva
prinft();
fprintf();
in questo secondo scenario nessuna scheda attende l'altra e tutto si muove in parallelo.
Vi pare un pensata valida?
grazie