加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 实现线程安全的数组

发布时间:2020-12-16 06:57:30 所属栏目:百科 来源:网络整理
导读:我想实现一个数组喜欢的数据结构,允许多个线程同时修改/插入项目.我怎样才能在性能方面获得它?我在std :: vector周围实现了一个包装类,我使用了关键部分来同步线程.请看下面的代码.每次线程想要处理内部数据时,它可能必须等待其他线程.因此,我认为它的表现
我想实现一个数组喜欢的数据结构,允许多个线程同时修改/插入项目.我怎样才能在性能方面获得它?我在std :: vector周围实现了一个包装类,我使用了关键部分来同步线程.请看下面的代码.每次线程想要处理内部数据时,它可能必须等待其他线程.因此,我认为它的表现并不好. :(有什么想法吗?

class parallelArray{
private:
    std::vector<int> data;
    zLock dataLock; // my predefined class for synchronizing
public:
    void insert(int val){
         dataLock.lock();
         data.push_back(val);
         dataLock.unlock();
    }

    void modify(unsigned int index,int newVal){
         dataLock.lock();
         data[index]=newVal; // assuming that the index is valid
         dataLock.unlock();
    }
};

解决方法

最好的方法是使用一些快速 reader-writer lock.您可以执行只读访问的共享锁定和可写访问的独占锁定 – 这样就可以同时执行只读访问.

在用户模式Win32 API中,Vista和更高版本中有Slim Reader/Writer (SRW) Locks可用.

在Vista之前,你必须自己实现读写器锁定功能,这是一项非常简单的任务.您可以使用一个临界区,一个事件和一个枚举/ int值来完成.虽然良好的实现需要更多的努力 – 我会使用手工制作的本地(堆栈分配)结构的链表来实现公平的等待队列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读