【发布时间】:2011-04-28 00:47:18
【问题描述】:
在 C# 中,我有多个对象,每个对象都有自己的线程,可以根据外部信号执行操作。所有对象都保留所有其他对象的列表。
我需要到达的信号仅在单线程中的单个对象中执行。此信号将删除所有对象,因此多个信号不会到达同一个对象。
最有可能信号会同时到达他们所有的地方,但也有可能是迟到的。由于信号将导致它们全部销毁并且不会传递给已销毁的信号,因此可以忽略延迟。
我虽然想做lock(this),然后锁定列表中的每个对象,但我不知道如何在不为其创建范围的情况下执行锁定(意味着手动解锁,而不是在锁定范围结束时)。
另一个问题是,如果一个已经开始锁定而另一个试图锁定它,它只会等待而不是忽略它。
此外,我无法控制Thread 对象,即使有办法检索它们,对Thread 对象的任何触摸都可能会使应用程序崩溃。诸如暂停所有其他线程之类的答案将不起作用。
那么如何让信号只被一个对象作用而被其余对象忽略呢?
【问题讨论】:
-
几件事:至少,请提供一些伪代码,说明您的对象如何获取消息以及它们如何破坏其他对象和/或它们自己。你的对象在做什么?如果所有对象都被销毁,谁会收到迟到的信号?
-
另外,收到消息的对象如何知道所有其他需要删除的对象?
-
我不知道它是如何工作的……它是一个使用嵌入式.NET 框架的C++ 框架。它在收到信号时调用我的对象中的一个方法,当我希望它被销毁时我应该调用destroy方法。我确实保留了我所有对象中所有对象的列表。当一个对象被销毁时,它的所有引用都会以某种方式设置为 null。
-
你能提供它如何操作的通用界面吗? IE。对象如何在您的系统中接收消息?
标签: c# multithreading