C++マルチスレッド一巡り読書会vol.11
開催日時
2021年10月20日(水) 19:30~21:00
開催URL
参加人数
6人
【条件変数(Condition Variable)】
condition_variableは低オーバーヘッドで使える!
【基本の待機/通知処理】
ラムダ式はどのタイミングで呼ばれる?
notify_all()したタイミングでかな
コードで書くと ラムダ(pred)は以下の形で使われる
while (!pred()) { wait(lock); }
atomicのexchangeに着想を得て汎用に使えるようにした(C++14から)
1行にすることで例外が出たりしないので安全
【効率的な待機/通知処理】
conditionを分ける利点あるのかな?
cond_valを使うのは割と複雑なケース
いくつか処理がつながったときとか
条件変数1つだけみたいな状況はあまりない
適当に使っても早くならない
最後の!がよくわからない
2つのスレッドで同時にtake()を呼び出すと、片方しか復帰せずもう片方は永遠に待ち続ける
(追記)このリンク先の表がわかりやすい
【停止トークン対応[C++20]】
exchangeしているのはnotify_oneの後で問題ないの?
ロック自体はローカル変数lkのデストラクタまで有効
notify_oneせずに例外が出たら困るので基本的に直前にする
shared_ptrのカウントが0になったときにstop_tokenとかは使う
【タイムアウトサポート】
wait_for便利
戻り値のenumでタイムアウトか判別可能
wait_untilの指定時刻はC++20で月末まで待つ処理とかが可能
【その他の提供機能】
基本的に何かに強いられているひとたち向けの関数
今日はここまで
次回は7章セマフォから
お悩み雑談室
C++の情報はどう集めてる?
セッションごとに分かれてる(セキュリティ、など)
日本語だと基本なくてC++ MIXが最後の砦か