多线程编程指南

销毁读写锁的状态

使用 rwlock_destroy(3C) 可以销毁与 rlwp 所指向的读写锁相关联的任何状态。

rwlock_destroy 语法

#include <synch.h>  (或  #include <thread.h>



int rwlock_destroy(rwlock_t *rwlp);

用来存储读写锁的空间不会释放。对于 POSIX 线程,请参见pthread_rwlock_destroy 语法

示例 8–1 使用银行帐户来说明读写锁。尽管该程序可能会允许多个线程对帐户余额进行并行只读访问,但是仅允许使用一个写入器。请注意,get_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);

}

rwlock_destroy 返回值

rwlock_destroy() 在成功完成之后返回零。其他任何返回值都表示出现了错误。如果出现以下任一情况,该函数将失败并返回对应的值。


EINVAL

描述:

参数无效。


EFAULT

描述:

rwlp 指向的地址非法。