Multithreading WaitForMultipleObjects vs CRITICAL_部分
我的理解是,Multithreading WaitForMultipleObjects vs CRITICAL_部分,multithreading,winapi,synchronization,Multithreading,Winapi,Synchronization,我的理解是,WaitForMultipleObjects和CRITICAL_SECTION都意味着等待线程完成。它们都被描述为线程之间的进程和线程同步机制。如果它们是为了达到相同的目标,它们可以互换使用吗?如果没有,那么它们之间的区别是什么?我认为引用以下内容就足够了: critical section对象提供了与此类似的同步 由互斥对象提供,但可以使用关键部分 仅由单个进程的线程执行。事件、互斥和信号量 对象也可以在单个流程应用程序中使用,但非常重要 截面对象提供了一种稍微更快、更高效的机制
WaitForMultipleObjects
和CRITICAL_SECTION
都意味着等待线程完成。它们都被描述为线程之间的进程和线程同步机制。如果它们是为了达到相同的目标,它们可以互换使用吗?如果没有,那么它们之间的区别是什么?我认为引用以下内容就足够了:
critical section对象提供了与此类似的同步
由互斥对象提供,但可以使用关键部分
仅由单个进程的线程执行。事件、互斥和信号量
对象也可以在单个流程应用程序中使用,但非常重要
截面对象提供了一种稍微更快、更高效的机制
用于互斥同步(特定于处理器的测试和
设置指令)
因此,关键部分
用于单进程同步。使用WaitForMultipleObjects
可以对多个进程进行sinc
我要补充的是,使用
WaitForMultipleObjects
您可以等待其他东西,例如异步I/O函数、计时器……它们不可互换,用于不同的目的
关键部分是互斥体。一次可以由一个线程输入包装在关键线程中的代码块。这也称为序列化,因为受保护的块是串行执行的
WaitForMultipleObjects
函数及其各种相关函数用于阻塞,直到同步对象发出信号。这可能是一个发出信号的事件、一个线程完成、一个进程完成、一个互斥变为可用等
通常使用等待函数来确保正确处理依赖关系。例如,如果一个计算只能在其他计算完成时进行,则将使用等待函数阻止,直到其他计算完成。使用适当的等待功能而不是繁忙的旋转外观可以避免浪费时钟周期。
关键部分是用户对象(注意核心),因此它比任何互斥对象都快(它是核心对象,因此需要系统核心调用)。因此,CS
只能用于同步一个进程内的线程(不能在不同的进程中使用一个CS
)。
WaitForMultipleObjects
使用core对象进行同步(互斥体、事件),因此它实际上可以用于进程间同步。
要以相同的方式使用CS
,还需要一个条件变量(不在Win XP中,仅在以后)不要使用内核模式事件吗?@ Mehrdad Till,现在我相信它是纯粹的用户模式对象(看起来我通过C++阅读窗口不够仔细)。它实际上比互斥量或信号量工作得更快。以下是一些文章:和