/* the philosopher thread function - create N threads, each of which calls 
 * this function with its philosopher number 0..N-1
 */
void *philosopher_thread(void *context) 
{
    int philosopher_num = (int)context; /* hack... */

    while (1) {
        sleep_exp(4.0);
        get_forks(philosopher_num);
        sleep_exp(2.5);
        release_forks(philosopher_num);
    }
    
    return 0;
}
void run(int *i)
{
	while (1)
	{
		sleep(1);
		if (eating[*i])
		{
			printf("Philosopher #%d is eating 'yum yum'.\n", *i+1);
			release_forks(i);
			eating[*i] = 0;
			printf("Philosopher #%d released forks.\n", *i+1);
		}
		else
		{
			printf("Philosopher #%d is thinking.\n", *i+1);
			pthread_mutex_lock(&mutex);
			if (eating[*i] = look_for_forks(i))
				printf("Philosopher #%d got his forks.\n", *i+1);
			pthread_mutex_unlock(&mutex);
		}
	}
}
Beispiel #3
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);
  }
}