研究報告 vol.6

谷口 義樹 -Yoshiki TANIGUCHI-

yoshiki@mikilab.doshisha.ac.jp

スレッドを用いるメリット

研究報告日:2002/07/12

現在の目標

現在の進捗状況

DNAS

去年から上川さんが研究しているDNAS (旧dmachinemon)について,その構成・仕組みや改善すべき点などを考察する.
これに関しては,現在,ソースを見ている段階である.

スレッドを用いるメリット

これまで作成してきたプログラムは,複数のクライアントからの接続に対応できるマルチクライアントプログラムである.
これを実装するためには,大きく分けて2つの方法がある.
複数プロセスを立ち上げるforkを用いる方法と,スレッドを複数立ち上げるpthreadを用いる方法である.

プロセスを複数立ち上げるためには,forkを用いる.
各プロセスは,独立したメモリ領域に割り当てられている.
よって,各プロセス間でデータの受渡しなどの処理をする際には,プロセス間通信を用いる.
UNIX系のOSは,パイプソケットなどのプロセス間通信を提供する.

プロセスを生成するには,後述のスレッドを生成するよりも時間がかかってしまい,
またプロセス間通信を用いると非常にコードが複雑化してしまう可能性がある.

一方スレッドは,複数のスレッドが同一のメモリ空間に割り当てられる.
このことで,スレッド間の通信は共有するメモリ領域への入出力により処理することが可能である.
また,スレッドの生成はプロセスの生成よりも高速である.
スレッドのメモリ共有の様子をfig 1に示す.

fig 1. スレッドのメモリ共有の様子

スレッドはメモリを共有しているため,同期の問題が発生する.
よって,セマフォなどによる同期処理をする必要がある.
セマフォ(semaphore)とは,一種の共有フラグで,同期を取るスレッド同士がこのフラグに注目し,
このフラグの変化に応じて処理を行うようにすることで,同期を実現する.
pthreadにおいては,相互排除変数(mutex)条件変数(condition variable)を用いる.

相互排除変数は,複数のスレッドが共有変数を更新することを保護する.
具体的には, を用いて,ロックおよびアンロックを行う.

条件変数は,ある条件が成立するまでスリープさせることが可能である.
具体的には, を用いて,スリープおよびスリープ解除を行う.

次回までの目標


Yoshiki TANIGUCHI