読者です 読者をやめる 読者になる 読者になる

pthread_rwlock_wrlock

UNIXシステムコール

pthread_rwlock_wrlockは、ライトロックを掛けるライブラリ関数・・・。

pthread_rwlock_wrlock(3) - Linux man page

値を参照する場合は、リードロックを掛けた・・・。
値を変更する場合は、ライトロックを掛ける・・・。
そして、リードロック×ライトロック、ライトロック×リードロック、ライトロック×ライトロックの場合は、ロックがかかり、同時に実行されず、後のスレッドのほうが待たされることになる・・・。

no0の時は、pthread_rwlock_rdlockでリードロックを掛け、no1の時は、pthread_rwlock_wrlockでライトロックを掛けている・・・。
内部の処理は変わらず、実際には他のスレッドから値が変更されることは無いが、リードロック×ライトロックの組み合わせなので、

$ ./pthread_rwlock_wrlock
no = 1, count1 = 0, count2 = 0
no = 1, count1 = 0, count2 = 1
no = 1, count1 = 0, count2 = 2
no = 1, count1 = 0, count2 = 3
no = 1, count1 = 0, count2 = 4
no = 0, count1 = 0, count2 = 4
no = 0, count1 = 0, count2 = 4
no = 0, count1 = 0, count2 = 4
no = 0, count1 = 1, count2 = 4
no = 0, count1 = 1, count2 = 4
$

このように同時に実行されることなく、no1が全部処理されてからno0の処理が始まる・・・。

Sample/pthread_rwlock_wrlock.c at master · bg1bgst333/Sample · GitHub