<分区>
而不是 sizeof(std::atomic<bool>)==1
?
可以通过简单的 std::atomic<bool>
实现互斥锁。 ,所以我认为互斥锁的大小可以这么小,或者可能是 4(32 位)。
<分区>
而不是 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/