マルチスレッドのプログラミング

rwlock_destroy(3THR)


#include <synch.h>  (または #include <thread.h>)

int rwlock_destroy(rwlock_t *rwlp);

rwlock_destroy(3THR) は、rwlp が指す読み取り / 書き込みロックを削除します。読み取り / 書き込みロックの記憶領域は解放されません。(POSIX スレッドについては、「pthread_rwlock_destroy(3THR)」を参照)。

戻り値

正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を返します。


EINVAL

引数が無効です。


EFAULT

rwlp が無効なアドレスを指しています。

読み取り / 書き込みロックの例

例 8-1 では、銀行口座に関する処理で読み取り / 書き込みロックを使用しています。口座残高に対して複数のスレッドが並行的に読み取り専用アクセスできますが、書き込みは 1 つのスレッドだけに制限されます。get_balance() 関数中のロックは、当座預金の残高 (checking_balance) と普通預金の残高 (saving_balance) を合計する演算が、原子操作によって行われることを保証するため必要です。


例 8-1 銀行口座の読み取り / 書き込み


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);
}