c – 实现线程安全的数组

c – 实现线程安全的数组,第1张

概述我想实现一个数组喜欢的数据结构,允许多个线程同时修改/插入项目.我怎样才能在性能方面获得它?我在std :: vector周围实现了一个包装类,我使用了关键部分来同步线程.请看下面的代码.每次线程想要处理内部数据时,它可能必须等待其他线程.因此,我认为它的表现并不好. :(有什么想法吗? class parallelArray{private: std::vector<int> data 我想实现一个数组喜欢的数据结构,允许多个线程同时修改/插入项目.我怎样才能在性能方面获得它?我在std :: vector周围实现了一个包装类,我使用了关键部分来同步线程.请看下面的代码.每次线程想要处理内部数据时,它可能必须等待其他线程.因此,我认为它的表现并不好. :(有什么想法吗?

class parallelArray{private:    std::vector<int> data;    zLock dataLock; // my predefined class for synchronizingpublic:    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值来完成.虽然良好的实现需要更多的努力 – 我会使用手工制作的本地(堆栈分配)结构的链表来实现公平的等待队列.

总结

以上是内存溢出为你收集整理的c – 实现线程安全的数组全部内容,希望文章能够帮你解决c – 实现线程安全的数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1225654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存