Closed8
Philo勉強まとめ
円卓上に哲学者が座る。哲学者の両サイドにはフォークがある。
哲学者は一人一人threadをもつ。
哲学者の行動ログは以下の順番パターンのみ
- フォークを取る
- 食べる
- 寝る
- 考える
- 死ぬ(毎回ではない)
基本的になコンセプトは1 ~ 4を繰り返す。
その間に哲学者が死なないような実装にする。
食べる時間、死ぬまでの時間、寝る時間は引数で与えられる。
- 食べる時間
forkを2つもつ必要がある。 - 死ぬまでの時間
哲学者は食べないと死ぬ。
以下の時間が引数で与えられた死ぬまでの時間を過ぎてしまったら哲学者は死んでしまう。
- シチュエーションがスタートしてから食べるまでの時間
- 前の食事を始めた時間から次の食事をするまでの時間
- 寝る時間
食べ終わったら寝る。その時間。
基本的に隣の哲学者がフォークを持っている(食べている)ときはそのフォークを置くまで隣の人は待たないと行けない。
その時間 + 寝る時間 + 食べる時間 > 死ぬまでの時間
になると哲学者は死んでしまうので、これを避ける。
哲学者が死んでから10ms以内にdiedのprintをしないといけない。
サンプルプログラム
今回の課題ではexitが使えないため、もし1threadで何かしら問題が発生した場合、全スレッドを回収して終了する必要がある?
pthread_createの第2引数はpthread_attr_tの構造体のポインタで、自分でセットした設定をスレッドに反映する事ができる。
pthread_attr_t中身の設定は以下
第2引数にNULLを入れた場合はpthread_attr_init
が呼び出され、初期値のattrが初期化される。
今回はNULLでも良さそう。
gettimeofdayを検証
このスクラップは2022/05/04にクローズされました