Windows/Linux システムプログラミングの入り口 スレッド

スレッドについて整理します
主な用途はプロセス内での平行処理です

具体的な例は
前回整理したメッセージング/シグナルの
受信待ちと平行で処理する際に使います

作り方は

【Windows】
 ・考え方
   プロセスからスレッドを作成する
   スレッドを終了する
   スレッドの終了を待つ

 ・スレッドを作成する
   平行処理したい関数を作る
     グローバル変数とヒープ、環境変数はスレッド間で共有される
   _beginthreadex(Win32API)を呼ぶ
     平行処理したい関数ポインタを登録しスレッドを作成

 ・スレッドを終了する
   パターン1:自然終了
     平行処理側の処理が普通に終了
     スレッド作成側は CloseHandle(Win32API)を呼び後始末する
     グローバル変数に終了フラグを仕込んどくと
      任意のタイミングで自然終了させられる
   パターン2:強制終了
     あまり使わない
     スレッド作成側が _endthreadex(Win32API)を呼び
      平行処理を終了させる
     スレッド作成側は CloseHandle(Win32API)を呼び後始末する

 ・スレッドの終了を待つ
   スレッド作成側は、平行処理を待ちます
     待たずに終了すると平行処理が途中で切れる
     スレッド作成側は WaitForSingleObject(Win32API)を呼び
     CloseHandle(Win32API)を呼び後始末する
   スレッドの終了を待たない場合
     あまり使わない
      _beginthread(Win32API)で作成し
      _endthread(Win32API)か自然終了させる


【Linux】
 ・考え方
   プロセスからスレッドを作成する
   スレッドを終了する
   スレッドの終了を待つ

 ・スレッドを作成する
   平行処理したい関数を作る
     グローバル変数とヒープ、環境変数はスレッド間で共有される
   pthread_create(システムコール)を呼ぶ
     平行処理したい関数ポインタを登録しスレッドを作成

 ・スレッドを終了する
   パターン1:自然終了
     平行処理側の処理が普通に終了
     グローバル変数に終了フラグを仕込んどくと
      任意のタイミングで自然終了させらる
   パターン2:強制終了
     スレッド作成側が pthread_exit(システムコール)を呼び
      平行処理を終了させる

 ・スレッドの終了を待つ
   スレッド作成側は、平行処理を待ちます
     待たずに終了すると平行処理が途中で切れる
     スレッド作成側は pthread_join(システムコール)を呼ぶ
   スレッドの終了を待たない場合
     あまり使わない
      スレッド作成後 pthread_detach(システムコール)を呼び
      後始末しないことを通知する


大まかに入り口だけ書いてるので
詳細は書籍等で
過去の記事におすすめの本が紹介してあります

この記事へのコメント