Newer
Older
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/wait.h>
void* runner(void* pid) {
printf("My TID is: %ld\nMy PID is: %d\n", pthread_self(), *((int*) pid));
pthread_exit(0);
}
pthread_t thread_gen(int* pid) {
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, (void*) pid);
return tid;
}
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
int cpid1, cpid2;
switch (cpid1 = fork()) {
case -1 :
perror("error");
exit(EXIT_FAILURE);
case 0 :
// Child process:
pthread_t tid1, tid2;
tid1 = thread_gen(&cpid1);
tid2 = thread_gen(&cpid1);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
exit(0);
default :
// Parent process:
int status;
if (wait(&status) == -1) {
perror("error");
}
}
switch (cpid2 = fork()) {
case -1 :
perror("error");
exit(EXIT_FAILURE);
case 0 :
// Child process:
pthread_t tid1, tid2, tid3;
tid1 = thread_gen(&cpid2);
tid2 = thread_gen(&cpid2);
tid3 = thread_gen(&cpid2);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_join(tid3, NULL);
exit(0);
default :
// Parent process:
int status;
if (wait(&status) == -1) {
perror("error");
}
}
return 0;