- C++相談室 part133
224 :デフォルトの名無しさん (ワッチョイ 8d46-5y5x)[sage]:2017/12/01(金) 09:59:25.68 ID:DoXCr8LG0 - await/asyncのコルーチンは並列化じゃなくて非同期処理を同期処理っぽく書くための物だとおもうよ
「これを実行して、終わったらこれを実行してね」 っていうときに、スタックの内容がそのまま残ってるからデータの受け渡しが楽というだけだろう ただ>>220が言ってるように順不同のresumeが起こったらアブナイので 何か書き込む前にbarrierを張って自分に関係が無い実行中のコルーチンを全部キャンセルして始末してしまおうという (実際にはbarrierだけじゃなくawaitのタイミングでも始末するようにしているが) ただキャンセルするために例外安全性とかも重要になってきて ここでもbarrierとコルーチンの仕組みがそのまま活躍するのが、なんか不思議な感じなんだが 読み込みオンリーだけどキャンセルできるセクションと、書き込みできるがキャンセルできないセクションに 処理を分けるというアイデアはなかなか汎用性が有るんじゃないかと で、二つのセクションは別関数にせずにコルーチンでつないで一つの関数に収めbarrier前/後とし barrier前ならawaitも使える、と、2,3のことが同時にかたづいて気持ちが悪い
|
|