研究報告 vol.4
谷口 義樹 -Yoshiki TANIGUCHI-
yoshiki@mikilab.doshisha.ac.jp
pthreadを用いたチャット
研究報告日:2002/06/27 (web報告:2002/06/21)
現在の目標
- pthreadを用いた簡単なチャットを作成
- gdb,strace,getopt,cvsのマニュアルの作成
- 用語集の作成
現在の進捗状況
チャットを実現するためには,あるクライアントがメッセージをサーバーに送信すると,
接続している他のクライアント全てに,その文章が送信されなければならない.
かつ,いつでもメッセージを受け付ける状態しておく必要がある.

fig 1. chatの動作

fig 2. 2つのthreadを用いた実装
具体的に今回のプログラムでは,全員に通知するための関数および通知を待つ関数として,
pthread_cond_broadcast(),pthread_cond_wait()を用いた.
table 1. 用いたpthread関数
| pthread_create | 新しいスレッドの作成 |
| pthread_mutex_lock | 他からの操作を全てブロックし,スレッドを保護する |
| pthread_mutex_unlock | 保護されているスレッドを解放する |
| pthread_cond_broadcast | 待ち状態にある他のスレッドを全て起こす |
| pthread_cond_wait | スレッドを待ち状態にする |
・lock/unlockの必要性
複数のスレッドから同じ変数にアクセスすると,データが取り出せなかったり,破壊されてしまう可能性がある.
それを防ぐために,ロック状態においた場合はそれを行ったスレッドがアンロックをするまで,実行を停止させることができる.
実行時にオプションとしてポート番号が指定できるように,
getopt_long()関数を用いた.
ex.) ./server --port 9876 (default=9999)
socket,bind,listenに失敗したときのエラー処理を加えた.
perror()と呼ばれる,システムエラーメッセージを出力する関数を用いた.
Chat program Source
用語集の作成
前回作成した,Grid,Data Grid,P2P,Napster,Gnutella,SETI@HOMEの用語説明を,
澤田君が作成したスクリプトを用いて,Grid班で統一し,Webに置いた.
http://mikilab.doshisha.ac.jp/dia/research/parallel/term/terms.html
マニュアルの作成
- gdb(The GNU Debugger)
- GNU開発環境の代表的なデバッガである.
gccに-gオプションを付けてコンパイルすることにより,デバッグのための情報を得ることができる.
http://mikilab.doshisha.ac.jp/~yoshiki/src/gdb.pdf
- strace(trace system calls and signals)
- プロセスが呼んだシステムコールと発生したシグナルを追跡するツールである.
シグナルとは,プロセスやスレッドに対してさまざまなイベントを通知するものである.
http://mikilab.doshisha.ac.jp/~yoshiki/src/strace.pdf
- getopt関数
- コマンドラインオプションを解析するための関数.
http://mikilab.doshisha.ac.jp/~yoshiki/src/getopt.pdf
次回までの目標
Yoshiki TANIGUCHI