2011-03-23 73 views
0

是否需要使用互斥对象 可能同时发生的实例 更新不同的对象实例?我是否需要将Mutex与对象实例一起使用?

下面是一个例子:


我有5个Pen对象实例,50作者线程,和3纸张对象实例
任何数量的作者可以使用任何数目的笔来在任何给定纸上书写。 我已经创建了阻塞队列来保护作者正在访问的Pen对象。 然而,钢笔情况下需要从作者线程的数据并将其追加到(指定)纸张实例。


问:我是否需要更新 纸张实例之前阻止笔的 写入操作?

+1

你能张贴你的榜样一些代码?另外,这功课呢? – Thomas 2011-03-23 16:02:16

+0

@Thomas这不是一个假设的问题,所以我没有代码。所以,这不是一个家庭作业:) – Tom 2011-03-23 16:33:37

+0

@Thomas对不起,错字 - 我的意思是说:这是一个假设的问题。 – Tom 2011-03-23 17:13:22

回答

0

您可能需要的文件或数据块访问的附加动作,否则同步,因为你可以有5名作者试图同时写一个文件。因此,无论何时一位作者正在访问论文,您都需要为其他人屏蔽该论文。

如果一个作者可以使用多笔(我现在无法理解它);)也可能会阻止多笔同时写入纸张,因此在纸张的写入时放置一个同步(笔) /追加方法。

+0

谢谢你的回答。这是我期待的。但是,多笔用户可能正在使用多笔笔。写入功能位于Pen对象中,它接受写入内容,作者ID和Paper ID。那么,我猜Pen的任何函数调用在Paper对象上的更新都应该更新?我看到如何同步将纸张对象功能:)谢谢! – Tom 2011-03-23 16:32:41

0

为什么你的笔对象有什么状态?在我看来,纸是国家持有人。笔出于某种原因是一个有限的资源好,但我不明白为什么你需要有状态。

如果你的笔是无状态的,或者至少有不可改变的状态,那么就没有必要为它有任何锁定的。

+0

我不确定Pen有一个状态的问题在哪里。但是使用锁定或同步方法的原因是因为潜在的5个作者线程可能正在使用全部5个笔实例。在这种情况下,如果所有5笔试图在纸上写入(),则此write()方法需要同步。也就是说,如果我不是一个完全的傻瓜;) – Tom 2011-03-24 01:11:40

+0

@Tom如果Pen没有状态,则write()是唯一可能需要保护的事情,具体取决于写入的状态更改及其排序要求。例如,如果你写了一行文本,可能你只想要一个线程安全的容器。 – 2011-03-28 22:27:20

相关问题