多线程编程指南

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

}