研究報告 vol.4

谷口 義樹 -Yoshiki TANIGUCHI-

yoshiki@mikilab.doshisha.ac.jp

pthreadを用いたチャット

研究報告日:2002/06/27 (web報告:2002/06/21)

現在の目標

現在の進捗状況

チャットを実現するためには,あるクライアントがメッセージをサーバーに送信すると,
接続している他のクライアント全てに,その文章が送信されなければならない.
かつ,いつでもメッセージを受け付ける状態しておく必要がある.


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