何时使用 pthread_mutex_t
When to use pthread_mutex_t
谁能解释一下在什么情况下使用 std::mutex 与 pthread_mutex_t 比较有利。我不明白为什么我们会使用 pthread_mutex_t。谢谢
std::mutex
来自标准库,因此如果您使用它,您的代码也将在未提供 pthreads 的平台上编译。例如在 windows std::mutex
下使用本机 WinAPI 互斥实现。
最好始终使用 std::mutex
。
pthread_mutex_t
是一个 POSIX 解决方案(可用于 linux 和其他 UNIX 系统),在 c++11 将同步原语引入 c++ 库之前就已经存在。您现在应该使用 std::mutex
,除此之外它更跨平台(也可以在 Windows 下使用)。
std::mutex 只是 pthread_mutex 在支持 pthreads 的系统上的薄包装。
一般来说,与本机版本(pthreads 或 windows 线程)相比,std::thread 基元上的操作非常有限。如果您不需要这些功能,您应该始终使用 std:: 版本,但如果您确实需要高级功能,那么您别无选择,只能使用本机版本。
native handle()
方法的存在正是出于这个原因。
请参阅 pthread_mutexattr 以了解除默认值外可用的 POSIX 互斥锁的其他风格。虽然其中一个主要的——递归与非递归——在 std::recursive_mutex 中可用,但对于 BSD 优先级上限等事情来说并非如此
谁能解释一下在什么情况下使用 std::mutex 与 pthread_mutex_t 比较有利。我不明白为什么我们会使用 pthread_mutex_t。谢谢
std::mutex
来自标准库,因此如果您使用它,您的代码也将在未提供 pthreads 的平台上编译。例如在 windows std::mutex
下使用本机 WinAPI 互斥实现。
最好始终使用 std::mutex
。
pthread_mutex_t
是一个 POSIX 解决方案(可用于 linux 和其他 UNIX 系统),在 c++11 将同步原语引入 c++ 库之前就已经存在。您现在应该使用 std::mutex
,除此之外它更跨平台(也可以在 Windows 下使用)。
std::mutex 只是 pthread_mutex 在支持 pthreads 的系统上的薄包装。
一般来说,与本机版本(pthreads 或 windows 线程)相比,std::thread 基元上的操作非常有限。如果您不需要这些功能,您应该始终使用 std:: 版本,但如果您确实需要高级功能,那么您别无选择,只能使用本机版本。
native handle()
方法的存在正是出于这个原因。
请参阅 pthread_mutexattr 以了解除默认值外可用的 POSIX 互斥锁的其他风格。虽然其中一个主要的——递归与非递归——在 std::recursive_mutex 中可用,但对于 BSD 优先级上限等事情来说并非如此