#include <stdio.h>
#include <pthread.h>
#include <time.h>
#define NUM_THREADS 4
#define ITERATIONS 1000000
long counters[NUM_THREADS];
void* increment(void* arg) {
int id = *(int*)arg;
for (int i = 0; i < ITERATIONS; i++) {
counters[id]++;
}
return NULL;
}
int main() {
pthread_t threads[NUM_THREADS];
int ids[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
ids[i] = i;
pthread_create(&threads[i], NULL, increment, &ids[i]);
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("Time (normal): %f seconds\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CiNpbmNsdWRlIDx0aW1lLmg+CgojZGVmaW5lIE5VTV9USFJFQURTIDQKI2RlZmluZSBJVEVSQVRJT05TIDEwMDAwMDAKCmxvbmcgY291bnRlcnNbTlVNX1RIUkVBRFNdOwoKdm9pZCogaW5jcmVtZW50KHZvaWQqIGFyZykgewogICAgaW50IGlkID0gKihpbnQqKWFyZzsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSVRFUkFUSU9OUzsgaSsrKSB7CiAgICAgICAgY291bnRlcnNbaWRdKys7CiAgICB9CiAgICByZXR1cm4gTlVMTDsKfQoKaW50IG1haW4oKSB7CiAgICBwdGhyZWFkX3QgdGhyZWFkc1tOVU1fVEhSRUFEU107CiAgICBpbnQgaWRzW05VTV9USFJFQURTXTsKCiAgICBjbG9ja190IHN0YXJ0ID0gY2xvY2soKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9USFJFQURTOyBpKyspIHsKICAgICAgICBpZHNbaV0gPSBpOwogICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCBpbmNyZW1lbnQsICZpZHNbaV0pOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1RIUkVBRFM7IGkrKykgewogICAgICAgIHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKICAgIH0KCiAgICBjbG9ja190IGVuZCA9IGNsb2NrKCk7CgogICAgcHJpbnRmKCJUaW1lIChub3JtYWwpOiAlZiBzZWNvbmRzXG4iLAogICAgICAgICAgIChkb3VibGUpKGVuZCAtIHN0YXJ0KSAvIENMT0NLU19QRVJfU0VDKTsKCiAgICByZXR1cm4gMDsKfQ==