最近,我已经完成了对单个共享对象的多线程编程的学习,但是我很好奇,为了在多个共享对象上成功地编程,会有什么不同的东西呢?
发布于 2011-09-21 05:20:19
这是目前非常热门的研究课题。如何在多个并发处理单元之间适当地共享数据的问题,目前还没有明显的好答案。
一些变化的问题,你应该考虑:
发布于 2011-09-21 01:31:18
区别在于,通常当您有多个共享对象时,它们存在于某种集合中(例如哈希表、链接列表、树或其他任何东西)。这需要某种模式来确定锁的工作方式。
最简单的解决方案是为集合设置一个锁。线程可以获取锁,在集合中找到对象,处理该对象,然后释放锁。这很简单,在某些情况下是最好的解决方案。但是,最大的缺点是两个线程不能在同一个集合中的两个不同对象上工作。
您还可以为集合本身拥有一个锁,对于集合中的每个对象也可以有一个锁。然后获取集合锁,找到您想要的对象,获取该对象的锁,然后释放集合锁(假设您不打算修改集合本身)。这允许其他线程搜索集合并修改集合中的其他对象,而线程正在处理集合中的对象。
还有各种各样的“中间”方法。但是基本的概念是一样的--你仍然必须确保一个结构不能被一个线程访问,而另一个线程正在或者可能正在修改它。
https://softwareengineering.stackexchange.com/questions/109646
复制相似问题