2017-04-09 33 views
1

在讀寫器鎖定的實現中,我們可以使用std::shared_mutex並使用std::shared_lockstd::lock_guardstd::unique_lockstd :: shared_mutex與std :: shared_lock是讀者還是作者寧願?

問題>這是新功能的作者還是讀者更喜歡?

更新基於安德魯的評論

Reference

// Multiple threads/readers can read the counter's value at the same time. 
    unsigned int get() const { 
    std::shared_lock<std::shared_mutex> lock(mutex_); 
    return value_; 
    } 

    // Only one thread/writer can increment/write the counter's value. 
    void increment() { 
    std::unique_lock<std::shared_mutex> lock(mutex_); 
    value_++; 
    } 

正如你可以從上面的例子看,我對讀/寫器的優先級沒有控制權。

+0

如果你實現自己的讀/寫鎖,是不是取決於你如何實現它? –

+0

@AndrewHenle請檢查我的更新問題。 – q0987

回答

1

它既不(如果正確實施)。相反,讀者和作者被選爲公平技術。這就是這個特性既不能在API中設置也不能指定的原因。

This answer詳情如何實現。

1

在實踐中:

  • 的libC++總是使用互斥+條件變量技術霍華德提到的,這並不奇怪。
  • libstdC++在可用的地方使用pthread_rwlock_t,回到霍華德提到的算法,如果它不是。因此,如果pthread_rwlock_t可用,則使用的算法取決於pthreads實現。我相信glibc默認情況下是讀者。
  • MSVC使用Windows SRWLOCK,其documentation

    沒有關於該項要求 所有權的線程將被授予所有權順序保證; SRW鎖定既不公平,也不公平。

相關問題