ではなくsizeof(std::atomic<bool>)==1
?
ミューテックスは単純な を介して実装できるstd::atomic<bool>
ため、ミューテックスのサイズはそれと同じくらい小さいか、おそらく4(32ビット)になると思います。
1bool
つでは、スピンロックしか実装できませんでした。これは不公平なロックになることに注意してください。これは、待機者が確実にキューに入ることが保証されないためです。最も極端なケースでは、競合が激しくなると、ロックを取得するための競争に常に負けるため、スレッドが永久にブロックされる可能性があります。
ミューテックスの実装では、待機中のスレッドをスリープ状態にできるようにするために、オペレーティング システムからのサポートが必要です。したがって、ミューテックスには、ロックされているかどうかを示すフラグと、待機中のスレッドをスリープ状態にしてウェイクアップできる何らかの形式のキュー記述子が必要です。ミューテックスが再帰ロック、堅牢性、オプションのスピン、優先度逆転保護などをサポートできるようにしたい場合は、さらに多くのメンバーが必要になります。
ミューテックスは、単純な方法で実装できます
std::atomic<bool>
mutex::lock
これは必要な操作であり、std::atomic<bool>
おそらく非ロックの種類であることを考えると、可能性はないようです。while
呼び出しをループすることもできますがcompare_exchange_strong
、これは と同じではありませんmutex::lock
。これは、待機期間全体で CPU を浪費するためです。
一般に、std::mutex
はマルチスレッド動作が定義された単純なものよりもはるかに複雑であり、bool
サイズがかなり大きいことを説明しています。これは、コンパイラに依存します。たとえば、ideone ではsizeof(mutex)
24です。