SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

pthreadについて

pthreadについて(キャンセル)

スレッドのキャンセル方法、およびその影響や注意点


  • このエントリーをはてなブックマークに追加

pthreadはPOSIX仕様に基づくOSにおける非同期処理の仕組みです。他の非同期処理と比較すると新しい仕組みですが、その奥は深くさまざまな機能を持っています。本稿ではスレッドのキャンセル法とその影響、使ってはいけない理由等を解説します。

  • このエントリーをはてなブックマークに追加

はじめに

 この連載ではUNIX系OSなどで使われるスレッド「pthread」についてサンプルを交えて説明していきます。pthreadはPOSIXが仕様化したスレッドモデルです。サンプルはCと一部C++、調査環境はFedora 8(2.6.23.1-49.fc8)、32bit、glibc-4.1-2、gcc-4.1.2-33およびFedora Core 6(2.6.18-1.2798.fc6)、32bit、glibc-2.5-3、gcc-4.1.1-30を使用しています。

前回の記事

10. キャンセル

 あらゆるアプリケーションにとって異常終了・メモリリーク・データ破壊等は絶対避けなくてはいけません。非同期処理を行うアプリケーションも同様です。

 特に非同期処理アプリで意識して避けなくてはいけない問題は、デッドロックです。一旦コレに陥ってしまうと、残された道は強制終了しかなくなります。スレッドも例外ではなく、デッドロックに対しては神経質な程に気をつけなくてはいけません。

 そしてキャンセル処理はその際たるもので、この章ではキャンセル処理の特徴と、デッドロックを誘発してしまう危険性について述べていきます。

10.1 リファレンス

 主にキャンセルの設定にかかわる関数は下記の通りです。より詳細についてはmanコマンド、もしくはココを参照してください。

  • int pthread_cancel( pthread_t thread );
    • pthread_cancel:引数のスレッドIDで指定されたスレッドに対して、取り消し要求を送ります。
    •  
  • int pthread_setcancelstate( int state, int * oldstate );
    • pthread_setcancelstate:スレッドの取り消し状態を変更します。
    • PTHREAD_CANCEL_ENABLE/PTHREAD_CANCEL_DISABLE のどちらかのみ設定可能。
      oldstate がNULLでないなら、変更前の取り消し状態を取得できます。
  • int pthread_setcanceltype( int type, int * oldtype );
    • pthread_setcanceltype:スレッドが取り消し要求を受けた時、すぐに受け入れるか遅延して受け入れるかを設定します。
  • void pthread_testcancel( void );
    • pthread_testcancel:当関数に達した時に取り消し要求があった場合、取り消し処理が行われる。それ以外では何もしない。無害な取り消しポイント。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
10. キャンセル(遅延取り消し)

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
pthreadについて連載記事一覧

もっと読む

この記事の著者

赤松 エイト(エイト)

(株)DTSに勤てます。WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。mixiもやってまして、こちらは子育てとか日々の日記メインです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1972 2008/08/20 16:01

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング