我应该使用来自C++标准还是来自 Windows API 的条件变量?

Should I use condition variables from the C++ standard or from the Windows API?

本文关键字:API 条件 Windows 变量 C++ 标准 我应该      更新时间:2023-10-16

在将条件变量实现到 Win32C++程序中时,使用 Win32 函数、类和数据类型(例如CreateThreadSleepConditionVariableCSWaitForSingleObjectExReleaseMutexCONDITION_VARIABLE)或来自C++11标准库(例如threadwaitjoinunlockcondition_variable)?

由于这个问题的答案可能不是二元的,那么在做出这样的决定时应该考虑哪些因素?

C++同步机制旨在C++原则。它们释放析构函数中的资源,并且还使用 RAII 来确保安全锁定。他们使用异常来发出错误信号。

从本质上讲,它们比基于函数的本机Windows API更难错误地使用。这意味着,如果您可以使用它们(您的实现支持它们),则应始终使用它们。

哦,它们是跨平台的。

一个考虑因素应该是编译器可以处理的内容。例如,当您在Windows上安装MinGW时,您可以选择是安装POSIX线程的API还是Win32线程的API。另一方面,如果使用 TDM-GCC,则应注意版本 4.7.1 及更低版本使用 Win32 线程,而版本 4.8.1 及更高版本使用 POSIX 线程。正如上面提到的,如果你使用的是Microsoft的编译器,你应该检查它对这些类的支持中的错误是否已经解决。

如果您的编译器支持 POSIX 线程,则可以使用标准库的C++线程类(例如threadmutexcondition_variable)。如果编译器支持 Win32 线程,则可以使用 Win32 线程函数。

就我而言,我最初拥有TDM-GCC 4.7.1并尝试使用C++标准库类,但这不起作用(由于上述原因)。所以我自己安装了MinGW,并在安装程序的"线程"选项中选择"posix"。然后我就可以使用这些类了。