#include <stdio.h>
#include <stdlib.h>
//#include <ntsid.h>
#include <pthread.h>
#include <unistd.h>
#define BAD_EXIT 1
#define NUM_TASKS 8
char * messages[NUM_TASKS];
void * PrintHello(void * taskIdPtr) {
int taskId;
sleep(1);
taskId = *((int *) taskIdPtr);
printf("Task id = %d, message = %s\n", taskId
, messages
[taskId
]); pthread_exit(NULL);
}
int main(int argc, char ** argv) {
pthread_t threads[NUM_TASKS];
int * taskIdPtr;
int rc, t;
messages[0] = "English: Hello World!";
messages[1] = "French: Bonjour, le monde!";
messages[2] = "Spanish: Hola al mundo";
messages[3] = "Klingon: Nuq neH!";
messages[4] = "German: Guten Tag, Welt!";
messages[5] = "Russian: Zdravstvytye, mir!";
messages[6] = "Japan: Sekai e konnichiwa!";
messages[7] = "Latin: Orbis, te saluto!";
for(t = 0; t < NUM_TASKS; t++) {
taskIdPtr
= (int *) malloc(sizeof(int)); *taskIdPtr = t;
printf("Creating thread %d\n", t
); rc = pthread_create(&threads[t], NULL, PrintHello, (void *) taskIdPtr);
if(rc) {
}
}
for(t = 0; t < NUM_TASKS; t++)
{
pthread_join(threads[t], NULL);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KLy8jaW5jbHVkZSA8bnRzaWQuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2RlZmluZSBCQURfRVhJVCAxCiNkZWZpbmUgTlVNX1RBU0tTIDgKCmNoYXIgKiBtZXNzYWdlc1tOVU1fVEFTS1NdOwoKdm9pZCAqIFByaW50SGVsbG8odm9pZCAqIHRhc2tJZFB0cikgewogICAgaW50IHRhc2tJZDsKICAgIHNsZWVwKDEpOwogICAgdGFza0lkID0gKigoaW50ICopIHRhc2tJZFB0cik7CiAgICBwcmludGYoIlRhc2sgaWQgPSAlZCwgbWVzc2FnZSA9ICVzXG4iLCB0YXNrSWQsIG1lc3NhZ2VzW3Rhc2tJZF0pOwogICAgZnJlZSh0YXNrSWRQdHIpOwogICAgcHRocmVhZF9leGl0KE5VTEwpOwp9CmludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpIHsKICAgIHB0aHJlYWRfdCB0aHJlYWRzW05VTV9UQVNLU107CiAgICBpbnQgKiB0YXNrSWRQdHI7CiAgICBpbnQgcmMsIHQ7CiAgICBtZXNzYWdlc1swXSA9ICJFbmdsaXNoOiBIZWxsbyBXb3JsZCEiOwogICAgbWVzc2FnZXNbMV0gPSAiRnJlbmNoOiBCb25qb3VyLCBsZSBtb25kZSEiOwogICAgbWVzc2FnZXNbMl0gPSAiU3BhbmlzaDogSG9sYSBhbCBtdW5kbyI7CiAgICBtZXNzYWdlc1szXSA9ICJLbGluZ29uOiBOdXEgbmVIISI7CiAgICBtZXNzYWdlc1s0XSA9ICJHZXJtYW46IEd1dGVuIFRhZywgV2VsdCEiOwogICAgbWVzc2FnZXNbNV0gPSAiUnVzc2lhbjogWmRyYXZzdHZ5dHllLCBtaXIhIjsKICAgIG1lc3NhZ2VzWzZdID0gIkphcGFuOiBTZWthaSBlIGtvbm5pY2hpd2EhIjsKICAgIG1lc3NhZ2VzWzddID0gIkxhdGluOiBPcmJpcywgdGUgc2FsdXRvISI7CgogICAgZm9yKHQgPSAwOyB0IDwgTlVNX1RBU0tTOyB0KyspIHsKICAgICAgICB0YXNrSWRQdHIgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSk7CiAgICAgICAgKnRhc2tJZFB0ciA9IHQ7CiAgICAgICAgcHJpbnRmKCJDcmVhdGluZyB0aHJlYWQgJWRcbiIsIHQpOwogICAgICAgIHJjID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZHNbdF0sIE5VTEwsIFByaW50SGVsbG8sICh2b2lkICopIHRhc2tJZFB0cik7CiAgICAgICAgaWYocmMpIHsKICAgICAgICAgICAgcGVycm9yKCJFcnJvciA6Iik7CiAgICAgICAgICAgIGV4aXQoQkFEX0VYSVQpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZm9yKHQgPSAwOyB0IDwgTlVNX1RBU0tTOyB0KyspCiAgICB7CiAgICAJcHRocmVhZF9qb2luKHRocmVhZHNbdF0sIE5VTEwpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=
Creating thread 0
Creating thread 1
Creating thread 2
Creating thread 3
Creating thread 4
Creating thread 5
Creating thread 6
Creating thread 7
Task id = 6, message = Japan: Sekai e konnichiwa!
Task id = 7, message = Latin: Orbis, te saluto!
Task id = 5, message = Russian: Zdravstvytye, mir!
Task id = 4, message = German: Guten Tag, Welt!
Task id = 3, message = Klingon: Nuq neH!
Task id = 2, message = Spanish: Hola al mundo
Task id = 1, message = French: Bonjour, le monde!
Task id = 0, message = English: Hello World!