小编use*_*282的帖子

两个unique_ptr <T>的无锁交换

交换两个unique_ptrs并不保证是线程安全的.

std::unique_ptr<T> a, b;
std::swap(a, b); // not threadsafe
Run Code Online (Sandbox Code Playgroud)

由于我需要原子指针交换,因为我喜欢所有权处理unique_ptr,是否有一种简单的方法将它们组合起来?


编辑:如果这是不可能的,我愿意接受替代方案.我至少想做这样的事情:

threadshared_unique_ptr<T> global;

void f() {
   threadlocal_unique_ptr<T> local(new T(...));
   local.swap_content(global); // atomically for global
}
Run Code Online (Sandbox Code Playgroud)

在C++ 11中这样做的惯用方法是什么?

c++ lock-free unique-ptr atomic-swap c++11

38
推荐指数
2
解决办法
9808
查看次数

std :: list中的最小元素索引

如果我有一个std::vector<int>,我可以通过减去两个迭代器来获得最小元素的索引:

int min_index = std::min_element(vec.begin(), vec.end()) - vec.begin();
Run Code Online (Sandbox Code Playgroud)

但是,对于没有随机访问迭代器的容器,例如a std::list<int>,这不起作用.当然,有可能做类似的事情

int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));
Run Code Online (Sandbox Code Playgroud)

但是我必须在列表中迭代两次.

我可以通过在列表中迭代一次来获取具有STL算法的最小值的元素的索引,还是必须编写自己的for循环代码?

c++ iterator stl std listiterator

7
推荐指数
1
解决办法
7977
查看次数

标签 统计

c++ ×2

atomic-swap ×1

c++11 ×1

iterator ×1

listiterator ×1

lock-free ×1

std ×1

stl ×1

unique-ptr ×1