osdev-jpでは、OS開発に有用な情報を収集し公開しています

View My GitHub Profile

2019/10/26 by uchan

libc++ の事情

<atomic> はマルチスレッドサポートがないと使えない。が,割り込み処理などでアトミック型を使いたい。Newlib が提供する <stdatomic.h> であれば使える。

<atomic> がマルチスレッドサポートを要求する真の理由を探索してはいないが,予想としては CPU レベルで読み書きがアトミックにならない型であってもアトミック型として使えるように,内部でミューテックス等を使うからではないか。

2018 年末に提案されてからマージされず放置されているがこんなパッチが提案されてはいる。 [[libcxx] Allow use of in baremetal systems when threading is disabled.](https://reviews.llvm.org/D54456)

このパッチを見るに,マルチスレッドサポートが無い場合に <atomic> の使用をエラーにしている行( #error )を無効化するだけで <atomic> をインクルードして使うことができるようになるようだ。どうしても使いたい人はこのパッチを当ててみるのもいいだろう。

libc++ のビルド

building libcxx