C++14 シグナルハンドラでできることの制限緩和と明確化

N3910 What can signal handlers do?

これまでのシグナルハンドラに関する規定では、以下のような問題がありました。

  • 制限が強すぎるためにハンドラ内ではvolatile std::sig_atomic_tかロックフリーアトミックオブジェクトの変数しか扱えなかった。
  • 未定義動作となる仕様があったために、汎用的なシグナルハンドラを書くのが難しかった。

この提案では、ハンドラ内で使えるオブジェクトの制限が緩和され、volatileやロックフリーオブジェクトでなくてもシグナルハンドラ内で定義・使用できるようになります。ただし変数に対する操作は、ロックフリー操作のみが許可されます。

いまの提案仕様では、mutexは使えないそうです。ロックフリー操作で実装される、スピンロックのようなクラスは可能。

メモリオーダーの観点で仕様が見直されたので、未定義動作も少なくなります。

参照