1#include <stdio.h>
2#include <unistd.h>
3#include <stdlib.h>
4#include <pthread.h>
5
6void *thread_function(void *arg); /* Pointer to function executed by each thread */
7
8int slow = 0;
9
10#define NUM 5
11
12int main() {
13    int res;
14    pthread_t threads[NUM];
15    void *thread_result;
16    int args[NUM];
17    int i;
18
19    for (i = 0; i < NUM; i++)
20      {
21	args[i] = i;
22	res = pthread_create(&threads[i], NULL, thread_function, (void *)&args[i]);
23      }
24
25    for (i = 0; i < NUM; i++)
26      res = pthread_join(threads[i], &thread_result);
27
28    printf ("Done\n");
29
30    if (slow)
31      sleep (4);
32
33    exit(EXIT_SUCCESS);
34}
35
36void *thread_function(void *arg) {
37    int my_number = *(int *)arg;
38    int rand_num;
39
40    printf ("Print 1, thread %d\n", my_number);
41    sleep (1);
42
43    if (slow)
44      {
45	printf ("Print 2, thread %d\n", my_number);
46	sleep (1);
47	printf ("Print 3, thread %d\n", my_number);
48	sleep (1);
49	printf ("Print 4, thread %d\n", my_number);
50	sleep (1);
51	printf ("Print 5, thread %d\n", my_number);
52	sleep (1);
53      }
54
55    printf("Bye from %d\n", my_number);
56    pthread_exit(NULL);
57}
58
59