#include <stdio.h>
#include <pthread.h>
int shared = 0;
typedef struct {
int increments;
} ThreadData;
void* increment(void* arg) {
ThreadData* data = (ThreadData*)arg;
for(int i = 0; i < data->increments; i++) {
shared++;
}
return NULL;
}
int main() {
int THREADS, INCREMENTS;
printf("Enter number of threads: "); printf("Enter number of increments per thread: "); scanf("%d", &INCREMENTS
);
pthread_t threads[THREADS];
ThreadData data = {INCREMENTS};
for(int i = 0; i < THREADS; i++) {
pthread_create(&threads[i], NULL, increment, &data);
}
for(int i = 0; i < THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("Final value of shared variable = %d\n", shared
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CgppbnQgc2hhcmVkID0gMDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBpbmNyZW1lbnRzOwp9IFRocmVhZERhdGE7Cgp2b2lkKiBpbmNyZW1lbnQodm9pZCogYXJnKSB7CiAgICBUaHJlYWREYXRhKiBkYXRhID0gKFRocmVhZERhdGEqKWFyZzsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBkYXRhLT5pbmNyZW1lbnRzOyBpKyspIHsKICAgICAgICBzaGFyZWQrKzsKICAgIH0KICAgIHJldHVybiBOVUxMOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBUSFJFQURTLCBJTkNSRU1FTlRTOwogICAgcHJpbnRmKCJFbnRlciBudW1iZXIgb2YgdGhyZWFkczogIik7CiAgICBzY2FuZigiJWQiLCAmVEhSRUFEUyk7CiAgICBwcmludGYoIkVudGVyIG51bWJlciBvZiBpbmNyZW1lbnRzIHBlciB0aHJlYWQ6ICIpOwogICAgc2NhbmYoIiVkIiwgJklOQ1JFTUVOVFMpOwoKICAgIHB0aHJlYWRfdCB0aHJlYWRzW1RIUkVBRFNdOwogICAgVGhyZWFkRGF0YSBkYXRhID0ge0lOQ1JFTUVOVFN9OwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBUSFJFQURTOyBpKyspIHsKICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgaW5jcmVtZW50LCAmZGF0YSk7CiAgICB9CgogICAgZm9yKGludCBpID0gMDsgaSA8IFRIUkVBRFM7IGkrKykgewogICAgICAgIHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKICAgIH0KCiAgICBwcmludGYoIkZpbmFsIHZhbHVlIG9mIHNoYXJlZCB2YXJpYWJsZSA9ICVkXG4iLCBzaGFyZWQpOwoKICAgIHJldHVybiAwOwp9