void putdown_chopsticks(int phil_id){ /*Use putdown_chopstick to put down the chopsticks*/ /*Your code here*/ if(phil_id % 2 == 0){ putdown_one_chopstick(phil_to_chopstick(phil_id, left), phil_id); putdown_one_chopstick(phil_to_chopstick(phil_id, right), phil_id); } else{ putdown_one_chopstick(phil_to_chopstick(phil_id, right), phil_id); putdown_one_chopstick(phil_to_chopstick(phil_id, left), phil_id); } }
void pickup_chopsticks(int phil_id){ /*Use pickup_chopstick(phil_to_chopstick(phil_id, right), phil_id); and pickup_chopstick(phil_to_chopstick(phil_id, left), phil_id); to pickup the right and left chopsticks. Beware of deadlock! */ /*Your code here*/ if(phil_id % 2 == 0){ pickup_one_chopstick(phil_to_chopstick(phil_id, left), phil_id); pickup_one_chopstick(phil_to_chopstick(phil_id, right), phil_id); } else{ pickup_one_chopstick(phil_to_chopstick(phil_id, right), phil_id); pickup_one_chopstick(phil_to_chopstick(phil_id, left), phil_id); } }
/* * Uses pickup_left_chopstick and pickup_right_chopstick * to pick up the chopsticks */ void pickup_chopsticks(int phil_id){ if(phil_to_chopstick(phil_id, left) < phil_to_chopstick(phil_id, right)) { pthread_mutex_lock(&chopstick_mutex[phil_to_chopstick(phil_id, left)]); pickup_left_chopstick(phil_id); pthread_mutex_lock(&chopstick_mutex[phil_to_chopstick(phil_id, right)]); pickup_right_chopstick(phil_id); } else { pthread_mutex_lock(&chopstick_mutex[phil_to_chopstick(phil_id, right)]); pickup_right_chopstick(phil_id); pthread_mutex_lock(&chopstick_mutex[phil_to_chopstick(phil_id, left)]); pickup_left_chopstick(phil_id); } }
/* * Uses pickup_left_chopstick and pickup_right_chopstick * to pick up the chopsticks */ void putdown_chopsticks(int phil_id){ putdown_left_chopstick(phil_id); pthread_mutex_unlock(&chopstick_mutex[phil_to_chopstick(phil_id, left)]); putdown_right_chopstick(phil_id); pthread_mutex_unlock(&chopstick_mutex[phil_to_chopstick(phil_id, right)]); }