#include <synch.h> (または #include <thread.h>) int rwlock_destroy(rwlock_t *rwlp); |
rwlock_destroy(3THR) は、rwlp が指す読み取り / 書き込みロックを削除します。読み取り / 書き込みロックの記憶領域は解放されません。(POSIX スレッドについては、「pthread_rwlock_destroy(3THR)」を参照)。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を返します。
例 8-1 では、銀行口座に関する処理で読み取り / 書き込みロックを使用しています。口座残高に対して複数のスレッドが並行的に読み取り専用アクセスできますが、書き込みは 1 つのスレッドだけに制限されます。get_balance() 関数中のロックは、当座預金の残高 (checking_balance) と普通預金の残高 (saving_balance) を合計する演算が、原子操作によって行われることを保証するため必要です。
rwlock_t account_lock; float checking_balance = 100.0; float saving_balance = 100.0; ... rwlock_init(&account_lock, 0, NULL); ... float get_balance() { float bal; rw_rdlock(&account_lock); bal = checking_balance + saving_balance; rw_unlock(&account_lock); return(bal); } void transfer_checking_to_savings(float amount) { rw_wrlock(&account_lock); checking_balance = checking_balance - amount; saving_balance = saving_balance + amount; rw_unlock(&account_lock); } |