narnaud
3 years ago
5 changed files with 81 additions and 23 deletions
@ -0,0 +1,72 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* philo_utils.c :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud@student.42nice.fr <marvin@42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/05/18 19:10:41 by narnaud@stude #+# #+# */ |
||||
|
/* Updated: 2022/05/18 19:27:30 by narnaud@stude ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#include "philosophers.h" |
||||
|
|
||||
|
int is_running(t_room *room) |
||||
|
{ |
||||
|
int ret; |
||||
|
|
||||
|
pthread_mutex_lock(room->lock); |
||||
|
ret = room->running; |
||||
|
pthread_mutex_unlock(room->lock); |
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
int safe_print(char *str, t_room *room, int id) |
||||
|
{ |
||||
|
int ret; |
||||
|
ret = is_running(room); |
||||
|
if (!ret) |
||||
|
return (0); |
||||
|
printf(str, room_clock(), id); |
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
int safe_wait(t_room *room, int start, int duration) |
||||
|
{ |
||||
|
int ret; |
||||
|
|
||||
|
ret = is_running(room); |
||||
|
while (ret && (room_clock() < (start + duration))) |
||||
|
{ |
||||
|
ret = is_running(room); |
||||
|
usleep(50); |
||||
|
} |
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
int room_clock() |
||||
|
{ |
||||
|
struct timeval time; |
||||
|
int ret; |
||||
|
static long int start_time = 0; |
||||
|
|
||||
|
gettimeofday(&time, NULL); |
||||
|
if (!start_time) |
||||
|
start_time = time.tv_sec * 1000 + time.tv_usec / 1000; |
||||
|
ret = (int)(time.tv_sec * 1000 + time.tv_usec / 1000 - start_time); |
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
int mini_atoi(char *nbr) |
||||
|
{ |
||||
|
int ret; |
||||
|
|
||||
|
ret = 0; |
||||
|
while (*nbr >= '0' && *nbr <= '9') |
||||
|
{ |
||||
|
ret = (*nbr - '0') + (10 * ret); |
||||
|
nbr++; |
||||
|
} |
||||
|
return (ret); |
||||
|
} |
Loading…
Reference in new issue