1

假设我有一些数组。所有项目最初都是null Thread1 写入数组的。Thread2 阻塞,直到数组中的所有项目都被设置(然后处理)。

我是这样做的:我用AutoResetEvent. 在 Thread1 中,每次我更新数组项时,我都会调用Set相应的 AutoResetEvent,而在 Thread2 中,我只是WaitHandle.WaitAll(events);

但现在我确实认为这不是有效的。我认为我可能应该使用一个事件。因为我可以计算更新了多少项目,所以我可以在上次更新时引发事件。

这是一个简化的例子,在现实生活中事情有点难,但也许你可以提出更好的建议?

我也应该Volatile.Read在 Thread1 中使用吗?(我有双CPU机器)。

4

1 回答 1

0

什么不看一下BlockingCollection以便您可以以线程安全的方式添加您的项目?

您也可以考虑使用线程安全的 ObserveableCollection来获取通知。

于 2012-11-21T12:12:07.897 回答