タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

*programmingとcとsignalに関するkiririmodeのブックマーク (2)

  • memologue - UNIX上でのC++ソフトウェア設計の定石 (2)

    鉄則2: シグナルハンドラで行ってよい処理を知ろう sigaction関数で登録したシグナルハンドラで行ってよい処理は非常に限定されている 次の3つの処理だけが許されている 自動変数の操作 “volatile sig_atomic_t” 型の大域変数の操作 「非同期シグナルセーフ」関数の呼び出し これ以外の処理を記述しないこと! 説明: シグナル受信時に何らかの処理を行うためには、シグナルハンドラと呼ばれる関数を用意し、それをsigaction関数でシグナル名と紐付けておけばOKです。しかし、シグナルハンドラ内で行ってよい処理は、上記の通り非常に限定されています。これを把握しないまま奔放なコードを書くと次のような現象が起き得ます: 問題1: プログラムがデッドロックする危険がある タイミングに依存する、再現困難なバグの原因となる デッドロックの発生が典型例だが、それ以外にも関数の戻り値不正

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
  • signalについて(後篇):CodeZine

    はじめに シグナルについての解説最終回です。今回はシグナルを扱う上での注意点や、よりよい実装方法の提案、シグナルの未来等について説明します。 過去の記事 signalについて(前篇) signalについて(中篇) 5. 実装上の注意点 前回まで説明してきたとおり、シグナルは気軽に使うことができる便利なプロセス間通信です。しかしシグナルには、やってはいけないことや気をつけるべき点が多く存在します。以下、代表的な注意点を挙げます。 5.1 最適化問題 volatileはそれほど使われない宣言修飾子ですが、これは最適化を制御する修飾子です。なぜこの修飾子がシグナルと関係あるのかについてですが、先にソースコードを示します。 /* 1. gcc -g -W -Wall signal_test_volatile.c -o signal_test_volatile 2. gcc -g -W -Wall

    signalについて(後篇):CodeZine
  • 1