1. 程式人生 > >同步與互斥,讀寫鎖和互斥鎖

同步與互斥,讀寫鎖和互斥鎖

原文出處:http://blog.csdn.NET/u012884354/article/details/46691761

相交程序之間的關係主要有兩種,同步與互斥。所謂互斥,是指散佈在不同程序之間的若干程式片斷,當某個程序執行其中一個程式片段時,其它程序就不能執行它們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。所謂同步,是指散佈在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的某種先後次序來執行,這種先後次序依賴於要完成的特定的任務。
  顯然,同步是一種更為複雜的互斥,而互斥是一種特殊的同步。
  也就是說互斥是兩個執行緒之間不可以同時執行,他們會相互排斥,必須等待一個執行緒執行完畢,另一個才能執行,而同步也是不能同時執行,但他是必須要安照某種次序來執行相應的執行緒(也是一種互斥)!


  總結:互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。
  同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。

  1. 讀寫鎖特點:  
  2. 1)多個讀者可以同時進行讀  
  3. 2)寫者必須互斥(只允許一個寫者寫,也不能讀者寫者同時進行)  
  4. 3)寫者優先於讀者(一旦有寫者,則後續讀者必須等待,喚醒時優先考慮寫者)  
  5. 互斥鎖特點:  
  6.   一次只能一個執行緒擁有互斥鎖,其他執行緒只有等待  
  7. 互斥鎖  
  8. pthread_mutex_init()  
  9. pthread_mutex_lock()  
  10. pthread_mutex_unlock()  
  11. 讀寫鎖  
  12. pthread_rwlock_init()  
  13. pthread_rwlock_rdlock()  
  14. pthread_rwlock_wrlock()  
  15. pthread_rwlock_unlock()  
  16. 條件變數  
  17. pthread_cond_init()  
  18. pthread_cond_wait()  
  19. pthread_cond_signal()