gpt4 book ai didi

c# - 如何在C#中的多个线程中一次处理信号

转载 作者:行者123 更新时间:2023-12-03 13:21:56 26 4
gpt4 key购买 nike

在C#中,我有多个对象,每个对象都有自己的线程,这些对象可以根据外部信号执行操作。所有对象都保留所有其他对象的列表。
我需要仅在单个线程中的单个对象中执行的到达信号。该信号将删除所有对象,因此同一对象不会有多个信号到达。
信号最有可能在同一时间到达所有信号,但是可能会有较晚的信号。由于信号将导致所有信号的破坏,而不会传递给被破坏的信号,因此可以忽略等待时间。
我虽然做了lock(this),然后锁定了列表中的每个对象,但是我不知道如何在不为其创建作用域的情况下执行锁定(意味着手动解锁,而不是在锁定范围结束时)。
另一个问题是,如果已经有人开始锁定它,而另一个人试图锁定它,它将等待并且不会忽略它。
另外,我对Thread对象没有控制权,即使有一种方法可以检索它们,但对Thread对象的任何触摸都可能会使应用程序崩溃。诸如暂停所有其他线程之类的答案将不起作用。
那么,如何使信号恰好作用于一个对象,而忽略其余的对象呢?

最佳答案

您可以有一个跟踪已处理内容的父线程。当线程接收到新信号时,您可以询问父级该信号是否已被处理。如果没有,请对其进行处理,然后父级将其他项锁定。

您还可以查看使用消息队列,并且每个信号只能由一个线程拾取。

关于c# - 如何在C#中的多个线程中一次处理信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com