Example #1
0
void eat(int p_id)
{
	int result = acquire_forks(p_id);
  if(result == 1)
  {
    printf("\nAgent %d is eating\n", p_id);
    printf("\nForks %d and %d are locked!\n", get_left_fork(p_id), get_right_fork(p_id));
    wait(generate_random_wait(p_id));
    printf("OM NOM NOM NOM NOM NOM NOM");
    release_forks(p_id);
    printf("\nForks %d and %d are unlocked!\n", get_left_fork(p_id), get_right_fork(p_id));
    printf("Agent %d is mildly satisfied and is returning to the arts life\n", p_id);
    
    pthread_mutex_lock(&eat_lock);
    iterations++;
    printf("\niteration #%d\n", iterations);
    pthread_mutex_unlock(&eat_lock);
    think(p_id);
  }
  else
  {
    think(p_id);
  }
}
Example #2
0
void * philosopher(void * para) {
    int mine = (int)para;
    int i = 0;

    while(i < 2) {
	i++;
  //      usleep(mine);
        get_left_fork(mine);
        get_right_fork(mine);

        eat();

        put_left_fork(mine);
        put_right_fork(mine);
    }
    printf("%d is finished\n", mine+1);
    return 0L;
}
Example #3
0
int acquire_forks(int p_id)
{
	printf("\nAgent %d is acquiring forks\n", p_id);
	
  if(pthread_mutex_trylock(&fork[get_left_fork(p_id)]) &&
      pthread_mutex_trylock(&fork[get_right_fork(p_id)]))
  {
    //acquired -- invoke eating
    printf("\nAyyy lmao, agent %d is obtaining forks\n", p_id);
    //printf("\nid %d, left fork %d, right fork %d\n", p_id, get_left_fork(p_id), get_right_fork(p_id));
    return 1;
  }
  else
  {
    //already acquired by another agent -- return to thinking
    printf("\nAgent %d cannot obtain forks -- thinking\n", p_id);
    return 0;
  }
}
Example #4
0
void release_forks(int p_id)
{
    pthread_mutex_unlock(&fork[get_left_fork(p_id)]);
    pthread_mutex_unlock(&fork[get_right_fork(p_id)]);
}