Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 针对多个请求者的设计模式,其中只有一个请求者导致获取资源,并且在资源可用时通知所有请求者?_Design Patterns - Fatal编程技术网

Design patterns 针对多个请求者的设计模式,其中只有一个请求者导致获取资源,并且在资源可用时通知所有请求者?

Design patterns 针对多个请求者的设计模式,其中只有一个请求者导致获取资源,并且在资源可用时通知所有请求者?,design-patterns,Design Patterns,如果多个线程可以从一个资源请求,但只有一个线程成功,那么合适的设计模式是什么。当资源可用时,将通知所有其他请求者 例如,两个或多个线程请求通过网络获得的资源文件。第一个线程会阻塞其他两个线程。第一个线程生成一个请求,然后像其他两个等待的线程一样等待资源变得可用 当我说等待时,他们并不是真正的等待阻塞,他们检查变量或其他东西,因为这已经是线程池的一部分,所以其他线程可以做其他工作 这个设计模式叫什么?你是说Mutex.TryLock吗 免责声明:用Windows/.NET术语;在其他平台和语言中,

如果多个线程可以从一个资源请求,但只有一个线程成功,那么合适的设计模式是什么。当资源可用时,将通知所有其他请求者

例如,两个或多个线程请求通过网络获得的资源文件。第一个线程会阻塞其他两个线程。第一个线程生成一个请求,然后像其他两个等待的线程一样等待资源变得可用

当我说等待时,他们并不是真正的等待阻塞,他们检查变量或其他东西,因为这已经是线程池的一部分,所以其他线程可以做其他工作

这个设计模式叫什么?

你是说Mutex.TryLock吗


免责声明:用Windows/.NET术语;在其他平台和语言中,名称和语法可能不同。

您大致有三种选择:

使用“未来”的概念——在java中,有一个接口java.util.concurrent.Future,但这个概念很容易用其他语言表达——第一个线程创建一个未来并将其放在一个全局映射中,然后线程拾取它,等待它实现,或者在可以的时候检查它,并在它准备好的时候对它采取行动。 使用futures,但将第一个线程交给池中的另一个线程进行实际加载;这涉及到更多的线程,但使主线程的代码更简单,因为它们不必担心自己是否是第一个线程。 在回调中使用加载的资源,由主线程注册,并由加载资源的线程调用。
我很喜欢第二种选择,但选择取决于您的具体要求。

有点。。。这大概就是我实现它的方式。只是想知道我的设计是否是最好的。。也许没关系。在我看来:如果它有效,保持简单,不要猜测过度使用的流行词“模式”。我不会为了它而使用模式。但是,选择最合适的模式可以使设计大大简化,并且不容易出错。我不是在用TryLock。我使用的是锁,但不是这里描述的方式。