假设我有一个列表,我想使用一个test_and_set
操作,其参数是计算某个指针地址l->a.next->next
。我认为,这不会是原子的,而且test_and_set
将毫无用处。有没有办法以原子方式计算该指针值,以便 TAS 以原子方式工作?
问问题
382 次
1 回答
2
您可能是指CAS(更有用)。
一般来说:是的,它通常用于实现事务性或无等待数据结构,
Buf 首先要做的事情:让我们将地址计算与地址上的原子操作分开,您首先获得应该交换某些东西的特定地址,CAS 不在乎您是如何到达那里的。
具体来说,您应该首先让每个线程在列表中导航,直到找到要替换下一个指针的位置,然后他们可以使用 CAS 尝试重复此操作。线程是否必须重新遍历列表以重试取决于您的场景。
棘手的部分实际上在代码中的不同位置:释放(或重用)列表节点的位置。一般来说,您必须假设您无法重复使用或释放与您的列表断开连接的节点链。在实践中,您可以使用一些启发式方法,但这取决于您的用例。
于 2013-02-28T20:26:27.843 回答