#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
// Function executed by each thread
void* thread_function(void* arg) {
int thread_num = *(int*)arg; // get thread number from argument
printf("Hello from Thread %d! (Thread ID: %lu)\n", thread_num
, pthread_self
()); return NULL;
}
int main() {
int num_threads = 5; // Number of threads to create
pthread_t threads[num_threads]; // Thread handles
int thread_args[num_threads]; // Arguments for each thread
// Create multiple threads
for (int i = 0; i < num_threads; i++) {
thread_args[i] = i + 1; // Thread numbering starts from 1
if (pthread_create(&threads[i], NULL, thread_function, &thread_args[i]) != 0) {
perror("Failed to create thread"); }
}
// Wait for all threads to finish
for (int i = 0; i < num_threads; i++) {
pthread_join(threads[i], NULL);
}
printf("All threads have finished execution.\n"); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KCi8vIEZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IGVhY2ggdGhyZWFkCnZvaWQqIHRocmVhZF9mdW5jdGlvbih2b2lkKiBhcmcpIHsKICAgIGludCB0aHJlYWRfbnVtID0gKihpbnQqKWFyZzsgIC8vIGdldCB0aHJlYWQgbnVtYmVyIGZyb20gYXJndW1lbnQKICAgIHByaW50ZigiSGVsbG8gZnJvbSBUaHJlYWQgJWQhIChUaHJlYWQgSUQ6ICVsdSlcbiIsIHRocmVhZF9udW0sIHB0aHJlYWRfc2VsZigpKTsKICAgIHJldHVybiBOVUxMOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBudW1fdGhyZWFkcyA9IDU7ICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiB0aHJlYWRzIHRvIGNyZWF0ZQogICAgcHRocmVhZF90IHRocmVhZHNbbnVtX3RocmVhZHNdOyAgICAgLy8gVGhyZWFkIGhhbmRsZXMKICAgIGludCB0aHJlYWRfYXJnc1tudW1fdGhyZWFkc107ICAgICAgIC8vIEFyZ3VtZW50cyBmb3IgZWFjaCB0aHJlYWQKCiAgICAvLyBDcmVhdGUgbXVsdGlwbGUgdGhyZWFkcwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7CiAgICAgICAgdGhyZWFkX2FyZ3NbaV0gPSBpICsgMTsgIC8vIFRocmVhZCBudW1iZXJpbmcgc3RhcnRzIGZyb20gMQogICAgICAgIGlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgdGhyZWFkX2Z1bmN0aW9uLCAmdGhyZWFkX2FyZ3NbaV0pICE9IDApIHsKICAgICAgICAgICAgcGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCIpOwogICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBXYWl0IGZvciBhbGwgdGhyZWFkcyB0byBmaW5pc2gKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykgewogICAgICAgIHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKICAgIH0KCiAgICBwcmludGYoIkFsbCB0aHJlYWRzIGhhdmUgZmluaXNoZWQgZXhlY3V0aW9uLlxuIik7CiAgICByZXR1cm4gMDsKfQo=