Mercurial > hg > CbC > old > DPP
view dpp3.cbc @ 0:d4bc23cb728b
Import from CVS (CVS_DB/member/atsuki/cbc/DPP)
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 16 Dec 2015 15:16:11 +0900 |
parents | |
children | a15437a1e94c |
line wrap: on
line source
/* ** Program: Dining Philosophors Problem ** Author : Atsuki Shimoji */ #include "dpp3.h" #include "queue.h" __code putdown_fork(PhilsPtr self, TaskPtr current_task) { //printf("%d: putdown_lfork:%d\n", self->id, self->left_fork->id); self->right_fork->owner = NULL; self->left_fork->owner = NULL; self->next = pickup_lfork; goto scheduler(self, current_task); } /* __code putdown_lfork(PhilsPtr self, TaskPtr current_task) { //printf("%d: putdown_lfork:%d\n", self->id, self->left_fork->id); self->left_fork->owner = NULL; self->next = pickup_lfork; goto scheduler(self, current_task); } __code putdown_rfork(PhilsPtr self, TaskPtr current_task) { //printf("%d: putdown_rfork:%d\n", self->id, self->right_fork->id); self->right_fork->owner = NULL; self->next = putdown_lfork; goto scheduler(self, current_task); } */ __code pickup_rfork(PhilsPtr self, TaskPtr current_task) { if (self->right_fork->owner == NULL) { //printf("%d: pickup_rfork:%d\n", self->id, self->right_fork->id); self->right_fork->owner = self; self->next = putdown_fork; goto scheduler(self, current_task); } else { self->next = pickup_rfork; goto scheduler(self, current_task); } } __code pickup_lfork(PhilsPtr self, TaskPtr current_task) { if (self->left_fork->owner == NULL) { //printf("%d: pickup_lfork:%d\n", self->id, self->left_fork->id); self->left_fork->owner = self; self->next = pickup_rfork; goto scheduler(self, current_task); } else { self->next = pickup_lfork; goto scheduler(self, current_task); } } /* end */