pthreadでmutex

排他制御ってやつをやってみた。

void lock_func(char *ptr){

    string padding("");

    if (*ptr == 'b')
        padding = "    ";
    
    cout << padding << "<" << ptr << "> : == waiting." << endl;
    pthread_mutex_lock(&mutex);
    cout << padding << "<" << ptr << "> : << locked." << endl;
    
    sleep(2);
    
    pthread_mutex_unlock(&mutex);
    cout << padding << "<" << ptr << "> : >> unlocked." << endl;
}

実行結果。どうやらちゃんと排他制御されているようだ。

    <b> : == waiting.
    <b> : << locked.
<a> : == waiting.
    <b> : >> unlocked.
<a> : << locked.
    <b> : == waiting.
<a> : >> unlocked.
<a> : == waiting.
<a> : << locked.
<a> : >> unlocked.
    <b> : << locked.
<a> : == waiting.
    <b> : >> unlocked.
<a> : << locked.
    <b> : == waiting.
<a> : >> unlocked.
    <b> : << locked.
<a> : == waiting.
    <b> : >> unlocked.
<a> : << locked.
    <b> : == waiting.
<a> : >> unlocked.
    <b> : << locked.
<a> : == waiting.
 
...