[완료]이런글 올리기 참 멋쩍네요..
글쓴이: cokemania / 작성시간: 수, 2007/05/16 - 9:54오후
posix 스레드 공부하는 학생입니다..
여기 질문들 보면 이런거 올리기 깝깝하지만ㅎ
#include pthread.h #define phil 5 pthread_mutex_t mutexChopstick[phil]; void philosopher(int arg) { int left = arg; int right = (arg + 1) % phil; int j; for(j=0 ; j < 100 ; j++) { if (left < right) { pthread_mutex_lock(&mutexChopstick[left]); printf("\n%d Philosopher pick up %d[left]chopstick!", arg, left); } pthread_mutex_lock(&mutexChopstick[right]); printf("\n%d Philosopher pick up %d[right]chopstick!", arg, right); if (left > right) { pthread_mutex_lock(&mutexChopstick[left]); printf("\n%d Philosopher pick up %d[left]chopstick!", arg, left); } printf("\nPhilosopher [%d] eat the spaghetti", arg); pthread_mutex_unlock(&mutexChopstick[left]); printf("\n%d Philosopher put down %d[left]chopstick!", arg, left); pthread_mutex_unlock(&mutexChopstick[right]); printf("\n%d Philosopher put down %d[left]chopstick!", arg, right); } } int userMain() { int index; pthread_t eater[phil]; for(index = 0 ; index < phil ; index++) { pthread_mutex_init(&mutexChopstick<ol> </ol> , 0); } for(index = 0 ; index < phil ; index++) { pthread_create( &(eater<ol> </ol> ), NULL, (void*)&philosopher, (void *)index); } }
컴파일시 picokernel 링크 시켜서
pico kernel 기반에서 돌아가는 프로그램인데요..
철학자 프로그램입니다. 뮤텍스에 순서를 주고 낮은거에 먼저 접근하게 해서
데드락을 피해 보자 하는 방지기법 구현;;;맞는지는 모르겠고요;;
물론 뮤텍스 숙제였지만 돌아가질 않아서 실패한..공부할겸 뭐가 문젠지 별거 다해봐도;;
처음엔 cygwin에서 돌렸었는데요.. picokernel이 셧다운 되더라고요..
혹시나 해서 고생해서 fedora 5 깔고(유닉스 기반 처음 접해봐요ㅜ)
거기서 돌려도 마찬가지.
다른점 한개는 메시지가 뜬다는거..
autid~~ avc : granted~~~ 이런식이요.
다섯번 뜨는거 보니까 posix 스레드 생성하는데 문제 있는듯도 하고요..
어쩔땐 스레드 실행되서 문장 몇개 출력되고나서 셧다운되기도하고요(picokernel이요.)
여기 저기 찾아보니까 SELinux 랑 관련 있는듯도 한데..
문제점을 가르쳐 주세요.
Forums:
k교수님께서
k교수님께서 개발하신 picokernel이군요.
접근 방법이 약간 잘못된 듯 싶습니다.
picokernel에는 쓰레드와 뮤텍스 생성 및 관리 기능이
포함되어 있구요, 아마 과제도 이 기능을 활용하여
철학자들이 굶음(데드락)없이 만찬을 잘 ~ 즐길 수 있도록 하는
내용 같습니다. (posix 쓰레드가 아닌 것 같아요..)
userMain()은 picokernel이 실행되어 초기화 과정을
끝낸후에 호출하는 쓰레드 입니다.
그러므로.. userMain() 이곳에서 threadCreate()와
mutexCreate() 등을 호출해야죠..
우선 picokernel(kernel.c)의 소스를 분석해 보시고 대략적인
구동 방식을 살펴보시기 바랍니다. 아래의 main 함수에서
호출되는 순서를 따라서 순차적으로 살펴보세요. 소스가 그리
길지 않으니 시간만 투자하신다면 좋은 결과 거두실 수 있습니다.
---------------------------------------
세계는 넓고, 할일은 많다.
---------------------------------------
세계는 넓고, 할일은 많다.
starvation을 굶음으로
starvation을 굶음으로 옮기는 것이 좋고, 데드락은 다른 말로 옮기시는 것이 좋을 듯 합니다.
데드락 때문에 굶을 수도 있지만, 스케줄링이 공평하지 않기 때문에 굶을 수도 있고, 굶는 데야 여러가지 이유가 있을 수 있는 거죠.
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
아무 생각없이
아무 생각없이 써놓고 보니 그렇네요. ^^
---------------------------------------
세계는 넓고, 할일은 많다.
---------------------------------------
세계는 넓고, 할일은 많다.
우선 답변 감사드리며..
^^*
님이 쓰신 글 찬찬히 읽다 보니 맹점이;;
어디서도 pico kernel을 이용하란 말이없더군요.
여태 pico kernel 이용해서 과제를 했던지라.
당연히 그안에서 돌꺼라고 생각하고 있었네요.
댓글 늦게 본거 죄송하고요^ ^;;
아직 해보진 않았지만 그냥 posix를 이용해서 새로 짜보라는 거 같습니다.
해보고 안되면 글 또 올릴께요;;
수고하세요(__)
아.. 밑에분 말씀도..
스레드 공부하는데 좋은 말씀이십니다.
^^*
댓글 달기