用條件變數和互斥量實現讀寫鎖

2021-09-13 19:18:16 字數 1814 閱讀 1910

#ifndef _pthread_rwlock_h

#define _pthread_rwlock_h

typedef struct

my_pthread_rwlock_t;

#define rw_magic 0x20190324

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

///函式實現

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

//沒有占用,取得讀鎖後引用計數加1,旋即釋放互斥鎖

if(result == 0)

rw->rw_refcount++;

//退出臨界區

pthread_mutex_unlock(&rw->rw_mutex);

return result;

}int my_pthread_rwlock_tryrdlock(my_pthread_rwlock_t *rw)

int my_pthread_rwlock_wrlock(my_pthread_rwlock_t *rw)

//沒有占用,取得寫鎖後引用計數置為-1,體現寫鎖的獨占性,旋即釋放互斥鎖

if (result == 0)

rw->rw_refcount = -1;

//退出臨界區

pthread_mutex_unlock(&rw->rw_mutex);

return(result);

}int my_pthread_rwlock_trywrlock(my_pthread_rwlock_t *rw)

//釋放乙個讀鎖或者寫鎖

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

}#endif // _pthread_rwlock_h

linux執行緒,互斥量,讀寫鎖,條件變數和屏障

1.建立執行緒 pthread create tid,null,func,null 2.id執行緒識別符號 pthread t tid pthread equal tid1,tid2 pthread t pthread self 3.執行緒終止條件 a pthread exit b return c...

互斥量(互斥鎖)與條件變數

使用pthread的互斥介面來保護資料,確保同一時間只有乙個執行緒訪問資料。互斥量從本質上來說是把鎖。條件變數是執行緒可用的另一種同步機制。條件變數給多個執行緒提供了乙個會和的場所。條件變數與互斥量一起使用時,允許執行緒以無競爭的方式等待特定的條件發生。條件本身是由互斥量保護的。我們使用pthrea...

Linux使用互斥鎖和條件變數實現讀寫鎖(寫優先)

1 只要沒有執行緒持有某個給定的讀寫鎖用於寫,那麼任意數目的執行緒可以持有該讀寫鎖用於讀 2 僅當沒有執行緒持有某個讀寫鎖用於讀或用於寫時,才能分配該讀寫鎖用於寫 換一種說法就是,只要沒有執行緒在修改 寫 某個給定的資料,那麼任意數目的執行緒都可以擁有該資料的訪問權 讀 僅當沒有其它執行緒在讀或者修...