.net 这里描述了什么样的多线程范例?

.net 这里描述了什么样的多线程范例?,.net,multithreading,c++-cli,.net,Multithreading,C++ Cli,MSDN上的源代码片段: 不要从主程序控制辅助线程的执行(例如,使用事件)。相反,设计您的程序,使工作线程负责等待工作可用,执行它,并在完成时通知程序的其他部分。如果您的工作线程不阻塞,请考虑使用线程池线程。监视器..::.PulseAll在工作线程阻塞的情况下非常有用。 我想知道它描述了什么,这样我就可以搜索基本的实现来开始工作听起来像一个工作池 多个线程在共享的工作队列上等待,执行任务,并通过共享的同步变量将任务发送到程序的其他部分 基本语义可能是MVar或其他语义。这听起来像是一种分散的基

MSDN上的源代码片段:

不要从主程序控制辅助线程的执行(例如,使用事件)。相反,设计您的程序,使工作线程负责等待工作可用,执行它,并在完成时通知程序的其他部分。如果您的工作线程不阻塞,请考虑使用线程池线程。监视器..::.PulseAll在工作线程阻塞的情况下非常有用。
我想知道它描述了什么,这样我就可以搜索基本的实现来开始工作

听起来像一个工作池

多个线程在共享的工作队列上等待,执行任务,并通过共享的同步变量将任务发送到程序的其他部分


基本语义可能是MVar或其他语义。

这听起来像是一种分散的基于“代理”的方法

编写多线程代码的“传统”方式有点像工作中的微观管理——老板分发所有的工作,其他人都期待着等待,等待工作交给他们。任何需要在团队成员之间传递的工作都是通过老板传递的


基于代理的方法就像授权团队中的每个人寻找并完成工作,根据需要在团队成员之间传递工作。老板知道发生了什么,但只起到了执行监控的作用。

这个片段的意思是:

假设您有一个生产者-消费者问题,您有一个消费者线程。如果您有一个专用线程(非线程池),那么您应该使用WaitHandle::WaitOne调用使该线程等待,直到您有东西要处理(可能在进程队列中)。当生产者填充完队列后,它可以调用WaitHandle::Set()通知您线程开始处理队列。WaitOne()用于专用线程,因为每次要处理队列时创建一个新的专用线程会很昂贵

DoProcessQueue()
{
    while(RUNTHREAD)
    {
        ... process queue items

        waitHandle.WaitOne(); // will wiat here until producer thread calls Set()
    }
}
对于小任务,建议使用线程池线程,因此如果您计划使用WaitOne(),则不应使用线程池线程,因为线程池是每个应用程序都可用的全局资源,阻止线程池线程不是一个好的选择