#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THREADS 3
pthread_mutex_t lock;
int shared_counter = 0;
void* factorial(void* arg) {
int num = *(int*)arg;
long long fact = 1;
for(int i = 1; i <= num; i++) {
fact *= i;
}
printf("Factorial of %d = %lld\n", num
, fact
); pthread_mutex_lock(&lock);
shared_counter++;
pthread_mutex_unlock(&lock);
return NULL;
}
int main() {
pthread_t threads[THREADS];
int numbers[THREADS] = {5, 6, 7};
pthread_mutex_init(&lock, NULL);
for(int i = 0; i < THREADS; i++) {
if(pthread_create(&threads[i], NULL, factorial, &numbers[i]) != 0) {
printf("Thread creation failed\n"); return 1;
}
}
for(int i = 0; i < THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("All threads completed.\n"); printf("Shared Counter = %d\n", shared_counter
); pthread_mutex_destroy(&lock);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KI2RlZmluZSBUSFJFQURTIDMKcHRocmVhZF9tdXRleF90IGxvY2s7ICAKaW50IHNoYXJlZF9jb3VudGVyID0gMDsgCnZvaWQqIGZhY3RvcmlhbCh2b2lkKiBhcmcpIHsKICAgIGludCBudW0gPSAqKGludCopYXJnOwogICAgbG9uZyBsb25nIGZhY3QgPSAxOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBudW07IGkrKykgewogICAgICAgIGZhY3QgKj0gaTsKICAgIH0KICAgIHByaW50ZigiRmFjdG9yaWFsIG9mICVkID0gJWxsZFxuIiwgbnVtLCBmYWN0KTsKICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9jayk7CiAgICBzaGFyZWRfY291bnRlcisrOwogICAgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2spOwogICAgcmV0dXJuIE5VTEw7Cn0KaW50IG1haW4oKSB7CiAgICBwdGhyZWFkX3QgdGhyZWFkc1tUSFJFQURTXTsKICAgIGludCBudW1iZXJzW1RIUkVBRFNdID0gezUsIDYsIDd9OwogICAgcHRocmVhZF9tdXRleF9pbml0KCZsb2NrLCBOVUxMKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBUSFJFQURTOyBpKyspIHsKICAgICAgICBpZihwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgZmFjdG9yaWFsLCAmbnVtYmVyc1tpXSkgIT0gMCkgewogICAgICAgICAgICBwcmludGYoIlRocmVhZCBjcmVhdGlvbiBmYWlsZWRcbiIpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgVEhSRUFEUzsgaSsrKSB7CiAgICAgICAgcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwogICAgfQogICAgcHJpbnRmKCJBbGwgdGhyZWFkcyBjb21wbGV0ZWQuXG4iKTsKICAgIHByaW50ZigiU2hhcmVkIENvdW50ZXIgPSAlZFxuIiwgc2hhcmVkX2NvdW50ZXIpOwogICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZsb2NrKTsKICAgIHJldHVybiAwOwp9