首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多线程-在数组中,我应该保护什么?

多线程-在数组中,我应该保护什么?
EN

Stack Overflow用户
提问于 2013-02-18 03:44:19
回答 3查看 1.3K关注 0票数 2

我正在编写一些具有全局数组的代码,该数组可以被两个线程访问以实现读写目的。

不会有读取或写入一系列索引的批处理,所以我正在尝试确定是否应该锁定整个数组,还是只锁定当前使用的数组索引。

最简单的解决方案是将数组视为CS,并在其周围放置一个大的大锁,但我是否可以避免这种情况,只锁定一个索引?

干杯。

EN

回答 3

Stack Overflow用户

发布于 2013-02-18 03:55:45

锁定一个索引意味着您可以跟踪哪个线程正在访问数组的哪一部分。跟踪这个在读线程和写线程之间共享的信息,意味着您对这个信息有一个锁。所以,你最终还是得到了一个全局锁。在这种情况下,我认为最有效的方法是:-使用读取器/写入器锁-或者将大型数组划分为几个子集,每个子集使用不同的锁。

票数 4
EN

Stack Overflow用户

发布于 2013-02-18 03:56:06

如果这是C++,我建议你使用STL容器。std::vector或者其他适合你工作的东西。它们速度快,使用方便,没有内存泄漏。

如果你想自己做所有的事情,那么当然有一种方法是使用单个互斥锁(这是不好的)。或者,您可以对整个数组使用一些reader writer thingy

我认为用自己的锁使数组线程的每个元素都安全是不可行的!那会吞噬你的记忆。检查链接,有3个不同输出的解决方案。对它们进行测试,并为您的情况使用最好的。(不要认为“好吧,我认为我的程序需要读者偏好算法”。试着在你的系统中使用它并决定。因为我们有时真的不能假设这样的事情)

票数 1
EN

Stack Overflow用户

发布于 2013-02-18 04:01:10

除非您在实际的运行条件下进行分析,否则没有办法知道什么是最优的。我建议实现一个类似数组的类,其中您可以将不同数量的元素锁定在组中。然后微调这些组的大小。

另一种选择是使用active object将所有读/写操作入队。这将使所有访问都是顺序的,这意味着您可以使用非并发数组类型来存储数据。这将需要在幕后使用某种并发队列数据结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14925294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档