Multithreading 关于简单线程术语的问题

Multithreading 关于简单线程术语的问题,multithreading,terminology,Multithreading,Terminology,当发出手动复位事件信号时, 等待事件的所有线程 变得可调度。当自动复位时 事件发出信号,只有一个 等待事件的线程变为 可安排的 我有一些真正的问题要问,因为我是线程新手 “设置”和“重置”事件意味着什么 手动重置和自动重置事件之间有什么区别 当一个事件被“发信号”时,它意味着什么?这是否意味着它已被激活 当一个线程变成“可调度”时意味着什么 什么是“等待事件” 基本上,“WaitHandle”(包括手动重置事件和自动重置事件)是允许线程等待某个事件发生的类型,在本例中,直到WaitHandle被

当发出手动复位事件信号时, 等待事件的所有线程 变得可调度。当自动复位时 事件发出信号,只有一个 等待事件的线程变为 可安排的

我有一些真正的问题要问,因为我是线程新手

  • “设置”和“重置”事件意味着什么
  • 手动重置和自动重置事件之间有什么区别
  • 当一个事件被“发信号”时,它意味着什么?这是否意味着它已被激活
  • 当一个线程变成“可调度”时意味着什么
  • 什么是“等待事件”
  • 基本上,“WaitHandle”(包括手动重置事件和自动重置事件)是允许线程等待某个事件发生的类型,在本例中,直到WaitHandle被“设置”

    线程(线程A)可以在WaitHandle上“等待”,直到一个单独的线程(线程B)“设置”(==“信号”)WaitHandle为止。这将允许线程A在该点继续运行

    如果有多个线程等待WaitHandle,则会出现主要差异。在这种情况下,通过手动重置事件,所有线程都将被允许继续运行(即:它们现在是可调度的,这意味着操作系统将对它们进行设置,并在某个时间点再次运行它们,通常相当快)。自动重置事件允许一个线程继续,而WaitHandle是“重置”的,这会阻止其他线程继续(直到下一个线程“释放”时再次发出WaitHandle信号为止)。

    基本上是一个“WaitHandle”(包括手动重置事件和自动重置事件)是允许线程等待某个事件发生的类型—在本例中,是等待WaitHandle被“设置”的类型

    线程(线程A)可以在WaitHandle上“等待”,直到一个单独的线程(线程B)“设置”(==“信号”)WaitHandle为止。这将允许线程A在该点继续运行


    如果有多个线程等待WaitHandle,则会出现主要差异。在这种情况下,通过手动重置事件,所有线程都将被允许继续运行(即:它们现在是可调度的,这意味着操作系统将对它们进行设置,并在某个时间点再次运行它们,通常相当快)。自动重置事件允许一个线程继续,而WaitHandle为“重置”,这会阻止其他线程继续(直到下一个线程“释放”时再次发出WaitHandle信号为止)。

    要解决您的每个问题:

    1) 当一个事件被重置时,这意味着等待该事件的另一个线程现在可以收到信号。换句话说,现在处于休眠(阻塞)状态的线程可以被唤醒来执行工作

    2) 根据,

    • 手动重置事件:一个事件对象,其状态保持有信号状态,直到ResetEvent函数将其显式重置为无信号状态。当发出信号时,可以释放任意数量的等待线程,或随后在其中一个等待函数中指定相同事件对象的线程

    • 自动重置事件:一个事件对象,其状态保持有信号状态,直到释放单个等待线程,此时系统自动将状态设置为无信号状态。 如果没有线程在等待,则事件对象的状态保持有信号。如果有多个线程正在等待,则会选择一个等待线程。不要采用先进先出(FIFO)顺序。内核模式APCs等外部事件可以更改等待顺序

    因此,基本上通过手动重置事件,您可以显式重置事件,触发任意数量的线程执行。通过自动重置事件,操作系统保证在发出事件信号时仅执行一个线程

    3) 对,当发出事件信号时,线程正在使用该事件执行工作。试图访问(发出信号)事件的任何其他线程都将被阻止

    4) 在此上下文中,可调度意味着可以执行线程。根据事件设置,操作系统将选择一个或多个等待事件的线程并执行它们


    5) 等待事件意味着线程正在事件对象上阻塞。在阻塞时,线程不执行任何CPU周期,并且基本上被操作系统“置于睡眠状态”

    要解决您的每个问题:

    1) 当一个事件被重置时,这意味着等待该事件的另一个线程现在可以收到信号。换句话说,现在处于休眠(阻塞)状态的线程可以被唤醒来执行工作

    2) 根据,

    • 手动重置事件:一个事件对象,其状态保持有信号状态,直到ResetEvent函数将其显式重置为无信号状态。当发出信号时,可以释放任意数量的等待线程,或随后在其中一个等待函数中指定相同事件对象的线程

    • 自动重置事件:一个事件对象,其状态保持有信号状态,直到释放单个等待线程,此时系统自动将状态设置为无信号状态。 如果没有线程在等待,则事件对象的状态保持有信号。如果有多个线程正在等待,则会选择一个等待线程。不要采用先进先出(FIFO)顺序。内核模式APCs等外部事件可以更改等待顺序

    因此,基本上通过手动重置事件,您可以显式重置事件,触发任意数量的线程执行。通过自动重置事件,操作系统保证在发出事件信号时仅执行一个线程

    3) 对,当发出事件信号时,线程正在使用该事件执行工作。试图访问(发出信号)事件的任何其他线程都将被阻止

    4) 在此上下文中,可调度意味着可以执行线程。根据事件设置,操作系统将选择一个或多个等待事件的线程并执行它们

    5) 等待事件意味着线程被阻塞