c***@gmail.com
2014-09-22 12:35:48 UTC
Salve ragazzi,
Ho spulciato un po' il forum ed ho visto che c'è stata una diattriba sull' evoluzione dei linguaggi in questi ultimi anni.. Io personalmente negli ultimi anni ho perso la mano con il c avendolo soppiantato per linguaggi interpretati di alto livello che mi hanno "abituato bene"... Ma cè poco da fare.. quando servono performance e controllo su come vengono gestite le cose bisogna fare un passo indietro...
Veniamo a noi..
Devo usare i Posix Thread in c e mi sono bloccato su un esempio di codice..
Mi aiutate?
#include <stdio.h>
#include <pthread.h>
struct arg {
int a, b;
int *rst;
};
typedef struct arg arg;
void* sum(void *);
int main()
{
pthread_t sum1, sum2;
int s1, s2;
pthread_create(&sum1, NULL, sum, &(arg){1, 500000000, &s1});
pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2});
pthread_join(sum1, NULL);
pthread_join(sum2, NULL);
printf("%d\n", s1 + s2);
}
void* sum(void *ptr)
{
int i, temp = 0;
arg *x = ptr;
for(i = x->a; i <= x->b; ++i)
temp += i;
*(x->rst) = temp;
}
La cosa che non capisco è :
quando inizializza il tipo definito arg passo &(arg){1, 500000000, &s1} ossia passo l'indirizzo di arg alla funzione che crea il thread.
Successivamente creo un altro thread : pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2}); e ripasso l'indirizzo della stesso tipo definito sovrascrivendo i campi.
Ma i thread a differenza dei processi condividono le variabili globali!!!
Questo esempio trovato su stack overflow è sbagliato?
Grazie mille.
Ho spulciato un po' il forum ed ho visto che c'è stata una diattriba sull' evoluzione dei linguaggi in questi ultimi anni.. Io personalmente negli ultimi anni ho perso la mano con il c avendolo soppiantato per linguaggi interpretati di alto livello che mi hanno "abituato bene"... Ma cè poco da fare.. quando servono performance e controllo su come vengono gestite le cose bisogna fare un passo indietro...
Veniamo a noi..
Devo usare i Posix Thread in c e mi sono bloccato su un esempio di codice..
Mi aiutate?
#include <stdio.h>
#include <pthread.h>
struct arg {
int a, b;
int *rst;
};
typedef struct arg arg;
void* sum(void *);
int main()
{
pthread_t sum1, sum2;
int s1, s2;
pthread_create(&sum1, NULL, sum, &(arg){1, 500000000, &s1});
pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2});
pthread_join(sum1, NULL);
pthread_join(sum2, NULL);
printf("%d\n", s1 + s2);
}
void* sum(void *ptr)
{
int i, temp = 0;
arg *x = ptr;
for(i = x->a; i <= x->b; ++i)
temp += i;
*(x->rst) = temp;
}
La cosa che non capisco è :
quando inizializza il tipo definito arg passo &(arg){1, 500000000, &s1} ossia passo l'indirizzo di arg alla funzione che crea il thread.
Successivamente creo un altro thread : pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2}); e ripasso l'indirizzo della stesso tipo definito sovrascrivendo i campi.
Ma i thread a differenza dei processi condividono le variabili globali!!!
Questo esempio trovato su stack overflow è sbagliato?
Grazie mille.