pthread_create 질문입니다 급해요ㅠ
글쓴이: rhkdgus232 / 작성시간: 수, 2014/04/23 - 2:30오후
void *Print(void *threadid)
{
long t;
t = (long)threadid;
printf("print %ld\n", t);
pthread_exit(NULL);
}
메인안에
for(t=0; t<10; t++)
{
printf("main %d\n", t);
rc = pthread_create(&thread[t], NULL, Print, (void*) t);
}
pthread_exit(NULL);
이런 식인경우
main 0
main 1
.
.
.
main 10
print 9 //여기는 뒤죽박죽 ..
print 10
.
.
.
print 0
이런식으로 출력이 됩니다. 여기서 궁금한건 main이 끝날때 까지 pthread 함수 하나도 작동을 안한건가요?
다른 분들 예제들을 보면 pthread_create 부른 순간 바로 다음 라인에 thread가 출력이 되던데 무엇이 다른건가요? 예를들면
main 0
print 0 이런식..
main 1
print 1
.
.
.
Forums:
1. 코드가 좀 이상해 보이네용... void
1. 코드가 좀 이상해 보이네용...
이렇게 고치고 실제로 돌려보니 결과가 그야말로 뒤죽박죽입니다 -_-;;; main 0 이 가장 먼저 출력되고 주로 main이 먼저 출력되긴 하지만 나머지는 느려요.
그리고 각 thread에서 출력이 끝나기 전에 main 스레드가 종료되어 추가적인 내용이 출력되지 않는 현상이 있더군요. main 함수의 마지막에 sleep(1)정도를 넣어주시면 해결됩니다.
쓰레드를 생성한다고 해서 새로 생성된 쓰레드가 먼저
쓰레드를 생성한다고 해서 새로 생성된 쓰레드가 먼저 실행되지는 않습니다. 생성된 쓰레드가 스케쥴링 되어야 실행이 시작되는데, 그 전에 main 함수에서 loop을 다 도는 것 같네요.
원칙적으로는 '실행순서를 알 수 없다'라고만 알고 계시면 됩니다.
댓글 달기