pthreadことはじめ

マルチスレッドプログラミングってやったことなかったのだけれど、今やっているネットワークプログラミング実験でHTTPサーバをマルチスレッド化しなければいけないのでPOSIX Threadを勉強中。

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

using namespace std;

void *thread_func(void *ptr){
    int j = 0;
    for(int i = 0;i < 100000000; i++){
        if (j > 1000000){
            j = 0;
            cout << (char *)ptr;
            cout.flush();
        }
        j++;
    }
    cout << "thread<" << (char *)ptr << "> terminated." << endl;
}

int main(int argc, char * argv[]){
    pthread_t th1, th2;
    int ret1, ret2;

    ret1 = pthread_create(&th1, NULL, thread_func, (void *) "a");
    ret1 = pthread_create(&th2, NULL, thread_func, (void *) "b");
    pthread_join(th1, NULL);
    pthread_join(th2, NULL);

    cout << endl;
    return 0;
}
$ g++ -g pth1.cpp -lpthread && ./a.out
aaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaathread<a> terminated.
bbbbbbbbbbbbthread<b> terminated.