簡體   English   中英

列表上的原子操作

[英]Atomic operations over a list

假設我有一個列表,我想使用test_and_set操作,其參數是一些指針地址l->a.next->next 我認為這不是原子的, test_and_set也沒用。 有沒有辦法以原子方式計算指針值,以便TAS原子地工作?

你可能意味着CAS (更有用)。

通常:是的,它通常用於實現事務性或等待的數據結構,

首先要做的事情是:讓地址計算地址上的原子操作分開,首先得到應該交換某些東西的具體地址,CAS不關心你是如何到達那里的。

具體來說,您應首先讓每個線程導航列表,直到找到他們想要替換下一個指針的位置,然后他們可以嘗試使用CAS重復此操作。 這取決於您的場景線程是否必須重新遍歷列表以進行重試。

棘手的部分實際上是在代碼中的不同位置:您釋放 (或重用)列表節點。 一般來說,你必須承擔,你不能重復使用或從列表中斷開以往任何時候都免費節點鏈。 在實踐中,你可以使用heursitics,但這取決於你的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM