POSIX library를 이용한 Dinning Philosopher, Deadlock Prevention
본 자료는 1페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
해당 자료는 1페이지 까지만 미리보기를 제공합니다.
1페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

성공했을 경우에 작업를 실행한다. 탐색 부분은 무한 루프이지만, Linux Kernel의 스케줄링으로 여러 Thread가 실행될 수 있다.
3.2 소스 코드 - philosopher()부분만 기재
int g_index=0;
void *philosopher(void *arg)
{
int left,right;
int id=g_id++;
int spa=0, loop=1;
while(loop)
{
left=right=0;
while(pthread_mutex_trylock(mutexChopstick+g_index))
g_index=(++g_index)%5;
left=g_index++;
while(pthread_mutex_trylock(mutexChopstick+g_index))
g_index=(++g_index)%5;
right=g_index++;
spa++;
printf("philosopher %d eat spaghetti %d times\n",id,spa);
if(spa==5)
{
printf("philosopher %d is full!\n",id);
loop=0;
}
pthread_mutex_unlock(mutexChopstick+left);
pthread_mutex_unlock(mutexChopstick+right);
sched_yield();
}
pthread_exit(NULL);
}
2.4 결과 분석
역시 같은 결과가 나온다. 자원을 순차적으로 할당하기 때문에 지금 요청한 자원이 비어 있다면, 그 다음도 비어있을 수 있고, 만약 비어있지 않다고 하더라고 빌 때까지 순환을 하여 사용할 수 있게 된다.
  • 가격무료
  • 페이지수5페이지
  • 등록일2008.07.09
  • 저작시기2008.7
  • 파일형식한글(hwp)
  • 자료번호#473393
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니