37 int* array = (
int*)malloc(
sizeof(
int)*
i);
40 for (k=0; k<
DO; k++) {
47 pthread_create(&thread,NULL,
work,(
void*)array);
48 pthread_join(thread,NULL);
56 int shm_id = shmget(
KEY,
sizeof(
int)*i, IPC_CREAT | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
57 if (shm_id < 0) err(-1,
"erreur lors de shmget");
58 int* array = shmat(shm_id,NULL,0);
64 for (k=0; k<
DO; k++) {
75 err(pid,
"erreur de fork");
76 }
else if (pid == 0) {
86 for (i = 1; i<size; i++) {
91 int dt = shmdt(array);
92 if (dt < 0) err(dt,
"erreur lors de shmdt dans le fils");
99 int ctl = shmctl(shm_id, IPC_RMID, NULL);
100 if (ctl < 0) err(ctl,
"erreur lors de shmctl");
101 int dt = shmdt(array);
102 if (dt < 0) err(dt,
"erreur lors de shmdt");
103 shmctl(shm_id, IPC_RMID, NULL);
void timer_free(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:172
void * thread(void *param)
Definition: thread.c:10
recorder écrit les temps dans un fichier .csv
Definition: benchmark.c:208
void write_record_n(recorder *rec, long int x, long int time, long n)
Comme write_record mais divise time par n après avoir retiré l'overhead
Definition: benchmark.c:253
timer permet de mesurer le temps écoulé entre deux moments
Definition: benchmark.c:43
timer * t
Definition: memfork.c:25
int i
Definition: mutsem.c:43
void start_timer(timer *t)
Stoque le temps actuel comme début de la mesure dans t
Definition: benchmark.c:87
recorder * recorder_alloc(char *filename)
Alloue un recorder
Definition: benchmark.c:219
void * work(void *param)
Definition: shm.c:15
#define ARRAY_LEN
Definition: shm.c:11
void recorder_free(recorder *rec)
Libère toutes les resources utilisées par rec
Definition: benchmark.c:263
timer * timer_alloc()
Alloue un timer
Definition: benchmark.c:63
#define KEY
Definition: shm.c:12
#define DO
Definition: shm.c:13
long int stop_timer(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:133