(1)只要沒有執行緒持有某個給定的讀寫鎖用於寫,那麼任意數目的執行緒可以持有該讀寫鎖用於讀
(2)僅當沒有執行緒持有某個讀寫鎖用於讀或用於寫時,才能分配該讀寫鎖用於寫
換一種說法就是,只要沒有執行緒在修改(寫)某個給定的資料,那麼任意數目的執行緒都可以擁有該資料的訪問權(讀)。僅當沒有其它執行緒在讀或者修改(寫)某個給定的資料時,當前執行緒才可以修改(寫)它。
因此,讀為共享,寫為獨佔。
本程式只實現了一種可能,即優先考慮等待著的寫入者,可有其他實現方案。
//my_pthread_rwlock.h
#pragma once
#include#includetypedef struct
my_pthread_rwlock_t;
#define rw_magic 0x20180326
#define ebusy 22
#define my_pthread_rwlock_initializer
typedef int my_pthread_rwlockattr_t;
int my_pthread_rwlock_init(my_pthread_rwlock_t *rw, my_pthread_rwlockattr_t *attr);
int my_pthread_rwlock_destroy(my_pthread_rwlock_t *rw);
int my_pthread_rwlock_rdlock(my_pthread_rwlock_t *rw);
int my_pthread_rwlock_wrlock(my_pthread_rwlock_t *rw);
int my_pthread_rwlock_unlock(my_pthread_rwlock_t *rw);
int my_pthread_rwlock_tryrdlock(my_pthread_rwlock_t *rw);
int my_pthread_rwlock_trywrlock(my_pthread_rwlock_t *rw);
//my_pthread_rwlock.c
#include"my_pthread_rwlock.h"
#includeint my_pthread_rwlock_init(my_pthread_rwlock_t *rw, my_pthread_rwlockattr_t *attr)
int my_pthread_rwlock_rdlock(my_pthread_rwlock_t *rw)
if(result == 0)
rw->rw_refcount++;
pthread_mutex_unlock(&rw->rw_mutex);
return result;
}int my_pthread_rwlock_wrlock(my_pthread_rwlock_t *rw)
if(result == 0)
rw->rw_refcount = -1;
pthread_mutex_unlock(&rw->rw_mutex);
return result;
}int my_pthread_rwlock_unlock(my_pthread_rwlock_t *rw)
}else if(rw->rw_nwaitreaders > 0)
result = pthread_cond_broadcast(&rw->rw_condreaders);
pthread_mutex_unlock(&rw->rw_mutex);
return result;
}int my_pthread_rwlock_tryrdlock(my_pthread_rwlock_t *rw)
int my_pthread_rwlock_trywrlock(my_pthread_rwlock_t *rw)
int my_pthread_rwlock_destroy(my_pthread_rwlock_t *rw)
#include#include#include#include"my_pthread_rwlock.h"
my_pthread_rwlock_t rwlock = my_pthread_rwlock_initializer;
void * thread_fun1(void *arg)
void * thread_fun2(void *arg)
void * thread_fun3(void *arg)
int main()
linux互斥鎖和條件變數
一 互斥鎖 1.初始化 在linux下,執行緒的互斥量資料型別是pthread mutex t.在使用前,要對它進行初始化 對於靜態分配的互斥量,可以把它設定為pthread mutex initializer,或者呼叫pthread mutex init.對於動態分配的互斥量,在申請記憶體 mal...
Linux互斥鎖和條件變數
include class thread lock thread lock void lock void unlock void wait void signal private pthread mutex t m mutex pthread mutexattr t m mutexatr pthre...
互斥鎖和條件變數
互斥瑣 定義 指代相互排斥,最基本的同步形式。用於保護臨界區,以保證任何時刻只有乙個執行緒或乙個程序在執行其中的 上鎖 pthread mutex lock 臨界區解鎖 pthread mutex unlock 條件變數 定義 用於等待訊號,同步的另一種手段。每乙個條件變數總有乙個互斥瑣與之關聯。等...