Linux 同步的一些理解

2021-06-20 07:25:44 字數 2408 閱讀 1974

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 這種由多個扇區組...

堆疊的一些理解

堆疊是一種執行 後進先出 演算法的資料結構。設想有乙個直徑不大 一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律 先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以 先進後出 就是這種結構的特點。堆疊就是這...