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

前端之家收集整理的这篇文章主要介绍了c – 为什么sizeof(std :: mutex)== 40(gcc,clang,icc)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > boost::thread data structure sizes on the ridiculous side?4个
而不是sizeof(std :: atomic< bool>)== 1?

可以通过简单的std :: atomic< bool>来实现互斥锁,因此我认为互斥锁的大小可以小到那个,或者可能是4(32位).

解决方法

有了一个bool,你只能实现自旋锁.请注意,这将是一个不公平的锁,因为没有什么可以确保服务员排队,所以在极端情况下有可能在高争用情况下线程可以被永久阻止,因为它总是会失去获得锁的竞争.

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

猜你在找的C&C++相关文章