배포판에 따라 실행되지 않는문제
#include <stdio.h> #include <unistd.h> #include <pthread.h> int ncount; // 쓰레드간 공유되는 자원 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 쓰레드 초기화 void* do_loop(void *data) { int i; pthread_mutex_lock(&mutex); // 잠금을 생성한다. for (i = 0; i < 10; i++) { printf("loop1 : %d", ncount); ncount ++; sleep(1); } pthread_mutex_unlock(&mutex); // 잠금을 해제한다. } void* do_loop2(void *data) { int i; // 잠금을 얻으려고 하지만 do_loop 에서 이미 잠금을 // 얻었음으로 잠금이 해제될때까지 기다린다. pthread_mutex_lock(&mutex); // 잠금을 생성한다. for (i = 0; i < 10; i++) { printf("loop2 : %d", ncount); ncount ++; sleep(1); } pthread_mutex_unlock(&mutex); // 잠금을 해제한다. } int main() { int thr_id; pthread_t p_thread[2]; int status; int a = 1; ncount = 0; thr_id = pthread_create(&p_thread[0], NULL, do_loop, (void *)&a); sleep(1); thr_id = pthread_create(&p_thread[1], NULL, do_loop2, (void *)&a); pthread_join(p_thread[0], (void *) &status); pthread_join(p_thread[1], (void *) &status); status = pthread_mutex_destroy(&mutex); printf("code = %d", status); printf("programing is end"); return 0; }
간단한 소스인데요..joinc 에 있는 소스입니다.
우분투 6.10 에서는 아무런 메시지도 뿌리지 않고 멈추어 있습니다.
같은 코드를 슬랙웨어 11.0 에서 컴파일해보면 원하던대로 동작합니다.
아 제 컴이 문제인가요? 아니면 배포판에 따라 문제가 있는건가요?
아래는 gcc 정보입니다.
laptop:~$ gcc -dumpspecs | grep thread
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
%{pthread:-lpthread} %{shared:-lc} %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}
%{static: %{fmudflap|fmudflapth: --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc --wrap=mmap --wrap=munmap --wrap=alloca} %{fmudflapth: --wrap=pthread_create}} %{fmudflap|fmudflapth: --wrap=main}
laptop:~$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)
laptop:~$
헐..이런...
다시(약 1 시간후) 실행해 보니 원하는대로 동작을 합니다.
아 어디를 의심해야할지 모르겠군요...
아까 같은 경우 전혀 실행되는 기미가 안보이길래
main 들어가자마자 printf("hi"); 를 넣어줘도 안되더군요....
헐 이런..
약 1 시간후 다시 실행하니 원하던 대로 동작을 합니다.
아 이 사태를 어찌 해야할지....
아까는 main 들어가자마자 printf("hi") 를 넣어도 안나왔었습니다.
.
.
begin{signature}
THIS IS SPARTA!!!!!n.
end{signature}
댓글 달기