我正在C ++中寻找无锁数据结构来替换以下内容:
pthread_mutex_lock(plock);
set.insert(element);
pthread_mutex_unlock(plock);
该集应该支持.insert()
和.size()
,最多具有O(logN)复杂度,具有迭代器,并且应该能够使用自定义比较器保持其顺序。基本上与Java中的ConcurrentSkipListSet
相同的东西。理想情况下,它应该是独立于平台的。
我在看CDS:http://libcds.sourceforge.net/doc/cds-api/modules.html但不确定哪个数据结构可以实现目标。对于某些数据结构,doc并不具有复杂性。
任何建议都会很棒,谢谢!
答案 0 :(得分:1)
使用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
};
没有C ++ 11,也有boost::mutex
。