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