假设我有一些数组。所有项目最初都是null
Thread1写入数组。 Thread2阻塞,直到数组中的所有项都被设置(然后处理)。
我这样做:我用AutoResetEvent
创建了另一个数组。在Thread1中,每当我更新数组项时,我都会将Set
调用到相应的AutoResetEvent,而在Thread2中我只是WaitHandle.WaitAll(events);
但现在我觉得这样做效率不高。我认为我应该使用一个事件。因为我可以计算有多少项目已更新,我可以在上次更新时提出事件。
这是简化的例子,在现实生活中事情有点困难,但可能你可以提出更好的建议吗?
我还应该在Thread1中使用Volatile.Read
吗? (我有双CPU机器)。
答案 0 :(得分:0)
什么不看BlockingCollection所以你可以用线程安全的方式添加你的项目?
您可以使用thread safe ObserveableCollection来查看通知。