無鎖map的實現

來源:互聯網
上載者:User

       前一段時間看了關於無鎖map實現的相關技術,主要用到了cas,faa等。

       如果你還不瞭解cas和faa可以去baidu一下。cas和faa之所以效率比鎖要高,是因為他們利用了cpu的特徵,在切換時不需要考慮記憶體上下文。

       這裡就產生了一種無鎖map的實現思路,可以繼承自stl的map,自己進行一層封裝,通過cas技術來實現鎖的機制,對封裝後的插入,刪除等操作使用通過cas實現的鎖機制進行同步。

由於本人使用的vs2008,無法給出stl的cas實現(可以跨平台),現在給出windows下的實現。

#include "windows.h"class CasLock{const long kLockedFlag__ = 1;const long kUnlockFlag__ = 0;void lock(){while (true){if (InterlockedCompareExchange(lock_, kLockedFlag__, kUnlockFlag__) == kUnlockFlag__){break;}Sleep(1);}}void Unlock(){lock_ = kUnlockFlag__;}private://lock_為1表示有人佔用了這個鎖,lock_1為0表示當前沒有搶佔volatile long lock_;};

當然上述只是個簡單的實現,如果大家需要做好一個無鎖隊列,還需要考慮其他問題,這裡就不一一贅述,大家可以膜拜一些論文。

Code Project 上的雄文 《Yet another implementation
of a lock-free circular array queue》

Herb Sutter 的《Writing Lock-Free Code: A
Corrected Queue》– 用C++11的 std::atomic 模板。

IBM developerWorks 的《設計不使用互斥鎖的並發資料結構》



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.