coorection td6

This commit is contained in:
2025-10-09 15:58:39 +02:00
parent 126b0890f1
commit b6c3b42361
2 changed files with 90 additions and 0 deletions

30
tp/tp6/correc_gr34/ex1.c Normal file
View File

@@ -0,0 +1,30 @@
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
#define NUM_THREADS 16
void *thread(void *thread_id) {
long id = ((long ) thread_id);
printf("Hello from thread %ld\n", id);
return (void*)(2*id);
}
int main() {
pthread_t threads[NUM_THREADS];
int t[NUM_THREADS];
long res;
for (long i = 0; i < NUM_THREADS; i++){
// t[i] = i;
assert( pthread_create(&threads[i], NULL, thread, (void*)i) == 0);
}
for (int i = 0; i < NUM_THREADS; i++){
assert( pthread_join(threads[i],(void *)&res) == 0);
printf("%ld\n",res);
}
return EXIT_SUCCESS;
}

60
tp/tp6/correc_gr34/sum.c Normal file
View File

@@ -0,0 +1,60 @@
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
static inline double tstamp(void)
{
struct timespec tv;
clock_gettime(CLOCK_MONOTONIC, &tv);
return tv.tv_sec + tv.tv_nsec * 1.0e-9;
}
typedef struct arg {
long start;
long end;
long step;
long S;
} arg;
void* slice(void* a) {
long start = ((arg*)a)->start;
long end = ((arg*)a)->end;
long step= ((arg*)a)->step;
long S = 0;
for(long i = start; i <= end; i += step)
S += i;
((arg*)a)->S = S;
return NULL;
//return (void*)S;
}
int main(int argc, char *argv[])
{
long N = strtol(argv[1], NULL,0);
long M = strtol(argv[2], NULL,0);
long S = 0, ret;
double t1,t2;
pthread_t* threads = (pthread_t*)calloc(M,sizeof(pthread_t));
arg* args = (arg*)calloc(M,sizeof(arg));
t1 = tstamp();
for (long i = 0; i < M; i++){
args[i].start = i + 1;
args[i].end = N;
args[i].step = M;
assert( pthread_create(&threads[i], NULL, slice, (void*)(args + i)) == 0);
}
for (int i = 0; i < M; i++){
// assert( pthread_join(threads[i], (void*)&ret) == 0);
assert( pthread_join(threads[i], NULL) == 0);
S += args[i].S;
}
t2 = tstamp();
assert( S == N*(N+1)/2 );
printf("S = %ld time = %lf\n",S,t2 - t1);
return EXIT_SUCCESS;
}