C++マルチスレッド一巡り読書会vol.17
開催日時
2022年1月26日(水) 19:30~21:00
開催URL
参加人数
2人
【待機/通知処理[C++20]】
アトミックにwaitとかあったのね、ってC++20からか
wait(1)で1でなくなるまで待機
1だったらwait()で待機する
【ロックフリー・プロパティ】
アトミック変数がアトミックではなくロックになる可能性がある
ロックフリーじゃない可能性があることを気にしないといけないのか
T型が基本型の場合はis_lock_free()はtrueを返したが、Tを前回作った構造体Hogeにするとfalseを返した
ロックをかけて値のアトミックな代入などを実現しているようだ
atomic_signed_lock_freeが別名で用意されているということはatomic<int>がロックフリー性を必ず持つとは保証されていないと読み取れる
atomic<int>::is_lock_free()がfalseを返す環境なんてあるのか…?
アトミック処理はたいていCPU命令に紐づいてそうなので、CPUがアトミック命令をサポートしていなければありうるか
ロックフリーかの内部実装はともかくstd::atomicを使っておけば機能的には問題ない
atomic_signed_lock_freeはintとは限らない。MSVCではintptr_t(__int64)になっていた
using atomic_intptr_t = atomic<intptr_t>;
【アトミックフラグ】
必ずロックフリー操作になることが保証されたクラス
【アトミック参照(Atomic Reference)[C++20]】
これを使えばアトミック変数でない変数もアトミックに処理ができる
MSVCではこれが通った
static_assert(4 == sizeof(std::atomic<int>), "error");
だったらint array[N]じゃなくstd::atomic<int> array[N]でも変わらないような…?
他所で管理されてる領域で勝手にatomic変数にできない場合とかに使えるかも
【その他の提供機能】
「memory_order_consumeの非推奨化」使えなくなるから非推奨とかはあったけど、仕様変更検討中で非推奨になることもあるんだ
次回はChapter12その他の機能から読み進めていきます
お悩み雑談室
来週で読み終わりそうなので次に何を読もうかを話していました