标签: libcds

LibCds:Michael Hashmap和Split Order List

我正在使用libcds,他们有Michael Hash Map和Split order list的实现.

基于我从文档中收集的信息,我是如何实现它们的:

包括:

#include <cds/map/michael_hash_map.h>
#include <cds/map/split_ordered_list.h>
using namespace cds;
Run Code Online (Sandbox Code Playgroud)

码:

  class TestDs {
public:
    virtual bool containsKey(int key)=0;
    virtual int get(int key)=0;
    virtual int put(int key, int value)=0;
    virtual int remove(int key)=0;

    virtual int size()=0;
    virtual const char* name()=0;
    virtual void print()=0;
    virtual void shutdown()=0;
};
Run Code Online (Sandbox Code Playgroud)

码:

class Michael: public TestDs{
private:

    cds::map::MichaelHashMap<int,int,cds::map::pair_traits <int, int>, cds::map::type_traits, CDS_DEFAULT_ALLOCATOR> _ds;
public:
        Michael(const Configuration& config) : _ds(config.initial_count,config.load_factor) {
        }

    bool containsKey(int key) {
        return (_ds.find(key)!=0);
    } …
Run Code Online (Sandbox Code Playgroud)

c++ segmentation-fault libraries libcds

6
推荐指数
1
解决办法
1915
查看次数

cds库:michael_deque在推回派生类型的自定义类型时导致崩溃(仅在发布模式下)

我正在使用带有默认优化设置(/ O2)的VS2012,此问题仅存在于发布模式中.

我有一些代码使用michael_deque(使用标准GC)和指向(抽象)类型的指针T.
当我尝试将指针推回到派生自的类型时,T应用程序在退出push_back()函数时崩溃michael_deque.

问题似乎完全取决于这种特定类型T,因为编写一个虚拟类foo,在类中派生它bar(并在构造函数中打印一些东西以避免它被优化掉),然后再推回到new bar()michael_deque不会导致崩溃.

T有问题的课程是这样的:

class Task
{
public:
    Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter) {};
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
    virtual ~Task() = 0 {};

    virtual void execute() final
    {
        this->doActualWork();
        unfinishedTasks--;
    }

    virtual void doActualWork() = 0;
public:
    unsigned int taskID;    //ID of this task
    unsigned int parentID;  //ID of the parent of …
Run Code Online (Sandbox Code Playgroud)

c++ libcds

3
推荐指数
1
解决办法
319
查看次数

标签 统计

c++ ×2

libcds ×2

libraries ×1

segmentation-fault ×1