- 论坛徽章:
- 12
|
void push(T const& data)
{
counted_node_ptr new_node;
new_node.ptr = new node(data);
new_node.external_count = 1;
new_node.ptr->next = head.load(std::memory_order_relaxed)
while( !head.compare_exchange_weak(new_node.ptr->next,
new_node,
std::memory_order_release,
std::memory_order_relaxed) ) ;
}
C++ concurrency in action 书上的一段代码。
感觉
head.load(std::memory_order_relaxed)
和
while( !head.compare_exchange_weak(new_node.ptr->next,
new_node,
std::memory_order_release,
std::memory_order_relaxed) ) ;
指定 memory_order 参数并不会有什么影响,和 memory_order_seq_cst 好像没什么区别。
都是对同一个原子变量 head 做操作。
大牛指教。 |
|