c++ - 为什么 sizeof(std::mutex)==40 (gcc,clang,icc)?

标签 c++ c++11 mutex

<分区>

而不是 sizeof(std::atomic<bool>)==1

可以通过简单的 std::atomic<bool> 实现互斥锁。 ,所以我认为互斥锁的大小可以这么小,或者可能是 4(32 位)。

最佳答案

使用一个bool,你只能实现一个自旋锁。请注意,这将是一个不公平的锁,因为没有任何东西可以确保等待者排队,所以在最极端的情况下,在高争用情况下,线程有可能永远被阻塞,因为它总是会失去获取锁的竞争。

互斥实现需要操作系统的支持才能让等待的线程进入休眠状态。因此,互斥量需要一个标志来告诉它是否被锁定,以及某种形式的队列描述符,允许让等待线程休眠和唤醒它们。如果您希望互斥量能够支持递归锁定、健壮性、可选自旋、优先级反转保护等,则需要更多成员。

关于c++ - 为什么 sizeof(std::mutex)==40 (gcc,clang,icc)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16693992/

相关文章:

c++ - 为什么 std::accumulate 对于标准数组会有这样的行为?

c - 使用 sys 信号量进行输出同步

c - C : How can I stop the threads from interfering with each other? 中的多线程

有人可以解释这两个问题的解决方案(c 程序,互斥体,线程)吗?

c++ - 成员函数模板参数默认值

c++ - 指针转换是否保持对齐属性?

c++ - 在两个 for 循环中删除 vector 的元素

c++ - 如何将 allegro5 库链接到 C++ 项目

multithreading - C++ 11线程更新MFC应用程序窗口。需要SendMessage(),PostMessage()吗?

c++ - 友元函数声明中的尖括号是什么意思?