2017-02-15 22 views
1

我在這個線程問題小白:\C多線程:如果所有線程都可以同時訪問,讀鎖(pthread_rwlock_rdlock)的優點是什麼?

我想,寫鎖定的行爲就像一個while是等待一個全局變量的確認。像:

/* pthread_rwlock_wrlock */ 

    while (is_blocked) { 
     /* waiting */ 
    } 
    is_blocked = true; 

    (writing code...) 

/* pthread_rwlock_unlock */ 
    is_blocked = false; 

這是正確的嗎? Read Lock如何工作?如果它是共享的,爲什麼使用?

信息:

pthread_rwlock_rdlock() - 獲取一個共享讀鎖

pthread_rwlock_wrlock() - 當你讀一個受保護的資源,你不希望它得到一個排它寫鎖定

+1

概念上它可能是相似的。但實際上,它不會是一個繁忙的等待循環,只是因爲這是CPU週期的巨大浪費,可以做一些有用的事情。在鎖被釋放之前,等待的線程將不會被安排執行,然後其中一個將被某種策略選中。 – StoryTeller

回答

2

在閱讀時改變。

讀鎖定塊寫鎖定!

這意味着,雖然您有讀取鎖定,但有人試圖獲得寫入鎖定時,必須等到您和其他讀取鎖定的人員完成讀取。由於閱讀不會改變資源,因此可以同時閱讀多個閱讀器。

請注意,此上下文中的讀取操作的定義是任何不會更改受保護資源狀態的操作。因此,爲了讀/寫鎖的目的,如果受保護的資源是流(如stdin或套接字),則從中讀取將改變其狀態,並且需要寫入鎖定。

3

讀鎖定的目的是阻止作者。如果有沒有寫鎖

  • 一個讀者可以得到一個鎖。
  • A 作家可以得到鎖如果有根本沒有鎖

既不具有簡單的實現,一個 你建議
例如有一個競爭條件, 和有時會失敗。

相關問題