#include <stdio.h>
#include <pthread.h>
#define THREADS 3
void* task(void* arg) {
int id = *(int*)arg;
printf("Thread %d started\n", id
); printf("Thread %d finished\n", id
); return NULL;
}
int main() {
pthread_t threads[THREADS];
int ids[THREADS];
for(int i = 0; i < THREADS; i++) {
ids[i] = i + 1;
pthread_create(&threads[i], NULL, task, &ids[i]);
}
for(int i = 0; i < THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("All threads completed\n");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CgojZGVmaW5lIFRIUkVBRFMgMwoKdm9pZCogdGFzayh2b2lkKiBhcmcpIHsKICAgIGludCBpZCA9ICooaW50Kilhcmc7CiAgICBwcmludGYoIlRocmVhZCAlZCBzdGFydGVkXG4iLCBpZCk7CiAgICBwcmludGYoIlRocmVhZCAlZCBmaW5pc2hlZFxuIiwgaWQpOwogICAgcmV0dXJuIE5VTEw7Cn0KCmludCBtYWluKCkgewogICAgcHRocmVhZF90IHRocmVhZHNbVEhSRUFEU107CiAgICBpbnQgaWRzW1RIUkVBRFNdOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBUSFJFQURTOyBpKyspIHsKICAgICAgICBpZHNbaV0gPSBpICsgMTsKICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgdGFzaywgJmlkc1tpXSk7CiAgICB9CgogICAgZm9yKGludCBpID0gMDsgaSA8IFRIUkVBRFM7IGkrKykgewogICAgICAgIHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKICAgIH0KCiAgICBwcmludGYoIkFsbCB0aHJlYWRzIGNvbXBsZXRlZFxuIik7CgogICAgcmV0dXJuIDA7Cn0=