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. ...