fork()에서 발생하는 문제
글쓴이: forhopes / 작성시간: 금, 2006/05/12 - 2:32오후
제가 fork()를 가지고 프로그래밍중에 있습니다.
if ( 0x0 == fork() )
{
printf("1\n");
for (;;) sleep(1);
}
printf("2\n);
이런 식으로 프로그래밍을 짰는데,
"1"은 출력되는데, 2는 출력 안 됩니다.
child는 동작하고 있는데, parent가 어디에선가 홀딩되어 있는 상태인가요 ?
어떤 경우 이런 증상이 나타나나요 ? 커널, 라이브러리 어느쪽이 문제일까요 ??
Forums:
#include #include int
#include
#include
int main()
{
if ( 0x0 == fork() )
{
printf("1\n");
for (;;) sleep(1);
}
printf("2\n");
sleep(5);
return 0;
}
전 아무 이상없이
1
2
출력 됩니다....
소스에 실수가 없는지 살펴보세요.
아래건 그냥 테스트 용으로 만들어 봤어요 ^^;
#include
#include
int main()
{
if ( 0x0 == fork() )
{
// 자식 프로세스는 여기에서 반복 //
for (;;) {
printf("1\n");
sleep(1);
}
}
// 부모 프로세스는 여기에서 반복 //
for (;;) {
printf("2\n");
sleep(1);
}
return 0;
}
테스트 프로그램에서 보면
1
2
1
2
.... // 중략
2
1
출력 순서가 2,1 로 뒤집히는 경우가 생기는데 이게 가장 간단한 RACE CONDITION입니다.
서로 자원을 경쟁하면서 쓰기때문에 순서 보장이 안되는거죠.
순서를 보장하기 위해서 세마포어나 뮤텍스를 응용하죠.
1%의 가능성이면 충분하다!
최선을 다하자!
1%의 가능성이면 충분하다!
최선을 다하자!
댓글 달기