首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程编程?

多线程编程?
EN

Software Engineering用户
提问于 2011-09-21 01:12:57
回答 2查看 453关注 0票数 4

最近,我已经完成了对单个共享对象的多线程编程的学习,但是我很好奇,为了在多个共享对象上成功地编程,会有什么不同的东西呢?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2011-09-21 05:20:19

这是目前非常热门的研究课题。如何在多个并发处理单元之间适当地共享数据的问题,目前还没有明显的好答案。

一些变化的问题,你应该考虑:

  • 对于多个共享对象,您将希望有不同的线程能够同时处理不同的对象。如果两个对象是不同的,但又是相关的,则需要有一种方法来决定它们是否可以相互独立地工作
  • 对象最终可能会在内存中移动得更多,因为它们离使用对象的位置更近(物理上更近,或者逻辑上更近)。
  • 多个相关对象可能最终缓存在多个、非相关的缓存中。这些缓存将希望知道它们何时变得无效,如果一组相关对象中的一个被更改,它们可能会这样做。例如,假设有一个线程绘制到屏幕上,而其他线程则在修改正在绘制的数据。如何确保你在屏幕上看到的东西是有意义的?
  • 访问对象有不同的方式,有些有副作用,有些没有。访问模式会对性能产生很大影响--优化技术可能会变得非常复杂。
票数 3
EN

Software Engineering用户

发布于 2011-09-21 01:31:18

区别在于,通常当您有多个共享对象时,它们存在于某种集合中(例如哈希表、链接列表、树或其他任何东西)。这需要某种模式来确定锁的工作方式。

最简单的解决方案是为集合设置一个锁。线程可以获取锁,在集合中找到对象,处理该对象,然后释放锁。这很简单,在某些情况下是最好的解决方案。但是,最大的缺点是两个线程不能在同一个集合中的两个不同对象上工作。

您还可以为集合本身拥有一个锁,对于集合中的每个对象也可以有一个锁。然后获取集合锁,找到您想要的对象,获取该对象的锁,然后释放集合锁(假设您不打算修改集合本身)。这允许其他线程搜索集合并修改集合中的其他对象,而线程正在处理集合中的对象。

还有各种各样的“中间”方法。但是基本的概念是一样的--你仍然必须确保一个结构不能被一个线程访问,而另一个线程正在或者可能正在修改它。

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

https://softwareengineering.stackexchange.com/questions/109646

复制
相关文章

相似问题

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