multithreading

August 2019

#include <iostream>
#include <pthread.h>

#define MAX_THREADS 5

// declare multithreading function
void* print(void* thread_id);
// define multithreading function
void* print(void* thread_id) {
    long tid = (long) thread_id;
    std::cout << "tid: " << tid << std::endl;
    // terminate
    pthread_exit(NULL);
};

int main() {
    pthread_t threads[MAX_THREADS];
    int thread[MAX_THREADS];

    for (int i = 0; i < MAX_THREADS; i++) {
        thread[i] = i;
        std::cout << "creating thread:" << thread[i] << std::endl;
        // create thread using pthread_create(thread, attr, start_routine, arg)
        if (pthread_create(&threads[i], NULL, print, (void*) &thread[i]) != 0) {
            std::cout << "unable to create thread: " << thread << std::endl;
            // fail
            exit(-1);
        }
    }
    // terminate
    pthread_exit(NULL);

    // creating thread:0
    // creating thread:1
    // tid: 140701949382784
    // tid: 140701949382788
    // creating thread:2
    // creating thread:3
    // tid: 140701949382792
    // creating thread:4
    // tid: 140701949382796
    // tid: 140701949382800
}