欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

無鎖的線程池,和內存池,還有無鎖的隊列的設計思路是什么呢?

林雅南2年前12瀏覽0評論

現在的無鎖設計得益于CPU對CAS操作的支持。所以想理解無鎖設計首先明白什么是CAS。

CAS是CompareandSwap的縮寫,翻譯成中文就是“比較并交換”。它的實現是這樣的:有三個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值和內存值相同時,將內存值V修改為B,否則什么都不做。

下面舉一個例子來解釋一下CAS算法。假設現在有t1和t2兩個線程都同時去訪問同一個變量10。所以他們會把主內存的值完全拷貝一份到自己的工作內存空間,所以t1和t2線程的預期值都是10。

假設t1和t2競爭時t1成功的將變量值修改為了11,然后寫到了內存中。t2執行更新時發現內存值變成了11與預期值10不一致,也就是這次更新失敗了,然后重新執行剛才的操作。

CAS操作類似于commit-retry模式。當同步沖突出現的機會比較少時,性能會得到很大的提升。

雖然CAS高效的解決了原子操作,但是還是存在三大問題:ABA問題、自旋CAS循環時間長開銷大、一次CAS只能保證一個變量的原子操作。針對這三個問題,不同語言都給出了解決方案,想詳細了解的可以查詢自己關注開發語言的解決方案。

由于對硬件知識缺乏,想了解cpu是如何實現的CAS的可以查看CPU相關資料。