dining philosopher 문제 아시나요? (철학자 식사 문제)
베네딕트
질문 제목 :
dining philosopher 문제인데요. 제가 짠대로 하면
무한 대기 상태로 멈춰 버리네요.... 어떻게 고쳐야 할까요??ㅜㅜ
이건 직접 실행은 안되구요... 그냥 코드 보시고 어디서 잘못된지 혹시
알려주실 분 없나요?ㅜㅜㅜ
질문 내용 :
#include
#include
static tsem_t *chopstick[5];
static tsem_t *printing;
static void update_status (int i, int eating)
{
static int status[5] = { 0, };
int idx;
status[i] = eating;
tsem_wait (printing);
for (idx = 0; idx 5; idx++)
fprintf (stdout, %3s , status[idx] ? EAT : ...);
fprintf (stdout, \n);
tsem_signal (printing);
}
void *thread_func (void *arg)
{
int i = (int) (long) arg;
do
{
tsem_wait (chopstick[i]);
tsem_wait (chopstick[(i + 1) % 5]);
update_status (i, 1);
tsem_signal (chopstick[i]);
tsem_signal (chopstick[(i + 1) % 5]);
update_status (i, 0);
}
while (1);
return NULL;
}
int main (int argc, char **argv)
{
int i;
for (i = 0; i 5; i++)
tsem_init (&chopstick[i], 1);
tsem_init (&printing, 1);
for (i = 0; i 5; i++)
{
pthread_t tid;
pthread_create (&tid, NULL, thread_func, (void *) (long) i);
}
/* endless thinking and eating... */
while (1)
usleep (10000000);
return 0;
}