1、只要沒有執行緒持有某個給定的讀寫鎖用於寫,那麼任意數目的執行緒可以持有該讀寫鎖用於讀。
2、僅當沒有執行緒持有該給定的讀寫鎖用於讀或者寫時,才能分配該讀寫鎖用於寫
這種對於給定的某個資源的共享訪問稱為 共享--獨佔上鎖。獲取乙個讀寫鎖用於讀稱為共享鎖,獲取乙個讀寫鎖用於寫稱為獨佔鎖。
讀寫鎖的資料型別為pthread_rwlock_t
靜態初始化 pthread_rwlock_t rwlock = pthread_rwlock_initializer
#include int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr);/*獲取共享鎖,如果有別的執行緒占用獨佔鎖,則阻塞*/
int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr);/*獲取獨佔鎖,如果有別的執行緒占有讀寫鎖,則阻塞*/
int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);/*釋放鎖*/
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr);
嘗試獲得讀寫鎖,如果不成功,則返回 ebusy;
int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr);
int pthread_destory(pthread_rwlock_t *rwptr);
初始化讀寫鎖的屬性物件
int pthread_rwlockattr_init(pthread_relockattr_t *attr);
int pthread_rwlockattr_destory(pthread_relockattr_t *attr);
目前只有唯一屬性,程序間共享
pthread_process_shared;
訊號量提供不同程序間或者是不同執行緒間用於同步的原語
2值訊號量可用於互斥,相當於互斥鎖。
sem_wait(&sem) pthread_mutex_lock(&mutex)
臨界區 臨界區
sem_post(&sem) pthread_mutex_unlock(&mutex)
wait 是等待,該操作會測試訊號量的值,如果其值 小於或者等於0 則會阻塞。一旦其值變為大於0,他就減1
post 是掛出,將訊號量的值加 1
#include sem_t * sem_open(const chat *name, int oflag, mode_t mode, unsigened int value);
int sem_close(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_getvalue(sem_t *sem, int *pvalue);獲取當前訊號的的訊號值,並把值儲存到pvalue中
pthread_cond_t = pthread_cond_initializer
pthread_cond_wait(&ready.cont, &ready.mutex);
pthread_cond_signal(&(ready.cont));
簡要說明自己理解的pthread_cond_wait
此函式分為兩個階段,第一階段是等待,等待條件來進行觸發,此時執行緒進入到條件變數的等待佇列中,然後釋放鎖。第二階段是條件觸發完成,系統核心已通知執行緒啟動此時執行緒等待別的執行緒釋放互斥鎖,函式內部完成獲取鎖的操作。執行緒開始執行,因此 在此函式的前後要 進行獲取鎖 和 釋放鎖的操作
eg:
pthread_mutex_lock(&(ready.mutex));
while (ready.nready == 0)
ready.nready--;
printf("%d\n", buff[put.nindex]);
pthread_mutex_unlock(&(ready.mutex));
互斥鎖主要是起到鎖的作用。
pthread_mutex_t mutex = pthread_mutex_initializer;
pthread_mutex_lock(&mutex);
pthread_mutex_unlock(&mutex);
對Java同步一些理解
基本概念 每個object都會有1個鎖.同步就是序列使用一些資源.說明 以下有些例子為了突出重點,省略了不必要的 特別是省掉了一些成員變數,就是需要同步的物件.1.多執行緒中對共享 可變的資料進行同步.對於函式中的區域性變數沒必要進行同步.對於不可變資料,也沒必要進行同步.多執行緒中訪問共享可變資料...
LINUX 關於inode的一些理解
一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組...
堆疊的一些理解
堆疊是一種執行 後進先出 演算法的資料結構。設想有乙個直徑不大 一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律 先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以 先進後出 就是這種結構的特點。堆疊就是這...