Linux線程同步——互斥鎖和讀寫鎖

在linux多線程編程中,往往會遇到多線程共享同個資源,爲了保證數據的一致性或者有序訪問,需要進行線程同步操作。

1、同步和互斥概念

所謂互斥,是指散佈在不同進程之間的若干程序片斷,當某個進程運行其中一個程序片段時,其它進程就不能運行它們之中的任一程序片段,只能等到該進程運行完這個程序片段後纔可以運行。

所謂同步,是指散佈在不同進程之間的若干程序片斷,它們的運行必須嚴格按照規定的某種先後次序來運行,這種先後次序依賴於要完成的特定的任務。“同”字應是指協同、協助、互相配合主旨在協同步調,按預定的先後次序運行。

因此,同步是一種更爲複雜的互斥,而互斥是一種特殊的同步

也就是說互斥是兩個線程之間不可以同時運行,他們會相互排斥,必須等待一個線程運行完畢,另一個才能運行,而同步也是不能同時運行,但他是必須要安照某種次序來運行相應的線程(也是一種互斥)! 

2、互斥鎖和讀寫鎖的區別

讀寫鎖特點:

  • 多個讀者可以同時進行讀(讀共享,寫互斥)
  • 寫者必須互斥(只允許一個寫者寫,也不能讀者寫者同時進行)
  • 寫者優先於讀者(一旦有寫者,則後續讀者必須等待,喚醒時優先考慮寫者)

互斥鎖特點:

  • 一次只能一個線程擁有互斥鎖,其他線程只有等待

3、什麼時候用互斥鎖什麼時候用讀寫鎖 

互斥鎖:

  • 寫操作比較多或是本身需要同步的地方並不多的程序中我們應該使用讀寫鎖
  • 線程之間需要指定特定的運行順序

讀寫鎖:

  • 在線程之間共享同一資源無特定的運行順序的情況下,同步地方比較多讀操作遠大於寫操作且

參考:https://blog.csdn.net/chen134225/article/details/81835055 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章