C+的并发集+;? < >我在C++中寻找一个无锁数据结构来代替以下内容: pthread_mutex_lock(plock); set.insert(element); pthread_mutex_unlock(plock);

C+的并发集+;? < >我在C++中寻找一个无锁数据结构来代替以下内容: pthread_mutex_lock(plock); set.insert(element); pthread_mutex_unlock(plock);,c++,concurrency,lock-free,concurrentskiplistmap,libcds,C++,Concurrency,Lock Free,Concurrentskiplistmap,Libcds,该集合应支持.insert()和.size(),最大复杂性为O(logN),具有迭代器,并应能够使用自定义比较器保持其顺序。基本上与Java中的ConcurrentSkipListSet功能相同。理想情况下,它应该是平台独立的 我在看CD:但不确定哪种数据结构可以实现这一目标。对于某些数据结构,文档实际上并不复杂 任何建议都很好,谢谢 使用C++11,编写自己的代码非常容易: template <typename T, typename Compare = std::less<T&g

该集合应支持
.insert()
.size()
,最大复杂性为O(logN),具有迭代器,并应能够使用自定义比较器保持其顺序。基本上与Java中的
ConcurrentSkipListSet
功能相同。理想情况下,它应该是平台独立的

我在看CD:但不确定哪种数据结构可以实现这一目标。对于某些数据结构,文档实际上并不复杂


任何建议都很好,谢谢

使用C++11,编写自己的代码非常容易:

template <typename T, typename Compare = std::less<T>>
class concurrent_set
{
private:
    set::set<T, Compare> set_;
    std::mutex mutex_;

public:
    typedef typename std::set<T, Compare>::iterator iterator;
    // etc.

    std::pair<iterator, bool>
    insert(const T& val) {
        std::unique_lock<std::mutex> lock(mutex_);
        return set_.insert(val);
    }

    size_type size() const {
        std::unique_lock<std::mutex> lock(mutex_);
        return set_.size();
    }
    // same idea with other functions
};
模板
类并发集合
{
私人:
集合::集合集合;
std::mutex mutex;
公众:
typedef typename std::set::迭代器迭代器;
//等等。
std::pair
插入(常数T&val){
std::唯一锁(互斥锁);
返回集插入(val);
}
大小\类型大小()常量{
std::唯一锁(互斥锁);
返回集合大小();
}
//与其他函数的想法相同
};

没有C++11,也会有
boost::mutex

你的平台是什么?如果是windows,您可以探索PPL()。我必须问一下,您试图解决的真正问题是什么?您可能会找到这样一个无锁容器……然后发现它比在常规集合上战略性地使用锁要慢。您确定
ConcurrentSkipListSet
是无锁的吗?@Jagannath Linux、Mac OS和Windows是我们的目标。@Fenwick在这种情况下,Intel的TBB可以帮助您。-该链接为您提供有关并发\u无序\u集的信息。与PPL一样,它们不支持并发集合。如果您不需要订购,那么这可能会对您有所帮助。没有锁?这是最重要的一点,从上面的代码可以看出,std::unique_lock是。。。锁。无锁数据结构的全部要点是避免锁定。是的,我是重言式俱乐部的骄傲成员。显然错过了那部分。