![]() |
1
2
如果我们假设您的列表有一个固定的初始大小,比如10个元素,并且您有10个线程操作元素1到10,那么不涉及共享的相互状态(请参阅 shared mutual state is the root of all evil )。因此,我认为同步没有什么大问题,我将使用这个列表。 但是,请记住,这在很大程度上取决于所执行的操作和列表的大小。如果列表中有1000000个元素,那么创建1000000个线程将效率低下,甚至不可能。 此外,一旦开始从列表中添加和删除元素,列表本身就是共享的相互状态,现在必须担心同步问题。 编辑:关于共享的相互状态 如果共享的状态不是相互的,则不会出现同步问题,因为任何人都无法更改数据。 如果您有未共享的相互状态,您可以更改该状态,但除当前代码外,任何人都无法在该状态上工作, 因此,更改直接反映在代码中。 如果您共享了相互状态,那么现在可以有两个线程,每个线程都可以更改另一个线程的数据。在多线程中 在这种情况下,只要不应用同步或锁定等机制,就会发生这种更改,并且读取器反映的不是确定性的。 因此,您可以遇到以下经典问题:
|