Linux 執行緒同步2

2021-07-24 18:31:13 字數 1401 閱讀 4354

讀寫鎖與互斥鎖類似,不過讀寫鎖允許更高的並行性。讀寫鎖可以有三種狀態:(1) 讀模式下的加鎖狀態;(2)寫模式下的加鎖狀態(3)不加鎖狀態。這個區別與互斥鎖的,因為互斥鎖只有加鎖和不加鎖的兩種狀態。一次只能有乙個執行緒的寫狀態的讀寫鎖,但是可以有多個執行緒占有讀狀態的讀寫鎖。

#include

int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,

const pthread_rwlockattr_t *restrict attr);

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

讀寫鎖通過呼叫pthread_rwlock_init進行初始化的,attr =null時使用預設的屬性。在釋放讀寫鎖占用的記憶體之前,需要呼叫pthread_rwlock_destroy函式做清理工作。

#include

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);  //寫模式下的加鎖

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);  //讀模式下的加鎖

int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);  //無論那種模式都可以用的解鎖

//使用讀寫鎖

#include #include struct job

;struct queue

;int queue_init(struct queue *qp)

return(0);

}void job_insert(struct queue *qp, struct job *jp)

else

qp->q_head = jp;

pthread_rwlock_unlock(&qp->q_lock);

} else

qp->q_tail = jp;

pthread_rwlock_unlock(&qp->q_lock);

}void job_remove(struct queue *qp,struct job *jp)

} else if(jp == qp->q_tail) }

else

pthread_rwlock_unlock(&qp->q_lock);

}struct job *job_find(struct queue *qp, pthread_t id)

for(jp = qp->q_head; jp != null; jp = ip->j_next) }

pthread_rwlock_unlock(&qp->q_lock);

return(jp);

}

Linux 執行緒 2(執行緒同步)筆記

二 讀寫鎖 三 條件變數 三 訊號量 同步即協同步調,按預定的先後順序執行 由於執行緒共享程序的資源和位址空間,當多個執行緒對同一共享資源進行操作時,為防止資料混亂,因此在對這些資源進行操作時,必須考慮到執行緒間資源訪問的同步和互斥的問題。這裡介紹 posix 中線程同步的方法,主要有互斥鎖 讀寫鎖...

Linux多執行緒程式設計(2)執行緒同步

執行緒同步 a.mutex 互斥量 多個執行緒同時訪問共享資料時可能會衝突,這跟前面講訊號時所說的可重要性是同樣的問 題。假如 兩個執行緒都要把某個全域性變數增加1,這個操作在某平台需要三條指令完成 1.從記憶體讀變數值到暫存器 2.暫存器的值加1 3.將暫存器的值寫回記憶體 我們通過乙個簡單的程式...

linux 執行緒 執行緒同步

因為執行緒獨自擁有的只有棧,其他的區域執行緒共同擁有。並且對共享區域的操作並不都是原子的。對共享區域的操作順序又是不確定的。就像建立兩個檔案描述符同時指向 同一檔案,並且連續向檔案中寫入那麼寫的東西可能是亂七八糟的。這時就需要執行緒對共享區的同步。而另一種情況是,多個執行緒的指令執行順序需要同步。這...