C++14 シグナルハンドラでできることの制限緩和と明確化
N3910 What can signal handlers do?
これまでのシグナルハンドラに関する規定では、以下のような問題がありました。
- 制限が強すぎるためにハンドラ内では
volatile std::sig_atomic_t
かロックフリーアトミックオブジェクトの変数しか扱えなかった。 - 未定義動作となる仕様があったために、汎用的なシグナルハンドラを書くのが難しかった。
この提案では、ハンドラ内で使えるオブジェクトの制限が緩和され、volatile
やロックフリーオブジェクトでなくてもシグナルハンドラ内で定義・使用できるようになります。ただし変数に対する操作は、ロックフリー操作のみが許可されます。
いまの提案仕様では、mutex
は使えないそうです。ロックフリー操作で実装される、スピンロックのようなクラスは可能。
メモリオーダーの観点で仕様が見直されたので、未定義動作も少なくなります。