배포판에 따라 실행되지 않는문제

0
points

#include  
#include  
#include  

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:~$

익명사용자의 이미지

헐..이런...

0
points

다시(약 1 시간후) 실행해 보니 원하는대로 동작을 합니다.
아 어디를 의심해야할지 모르겠군요...
아까 같은 경우 전혀 실행되는 기미가 안보이길래

main 들어가자마자 printf("hi"); 를 넣어줘도 안되더군요....

익명사용자의 이미지

헐 이런..

0
points

약 1 시간후 다시 실행하니 원하던 대로 동작을 합니다.

아 이 사태를 어찌 해야할지....
아까는 main 들어가자마자 printf("hi") 를 넣어도 안나왔었습니다.

시지프스의 이미지
2304
points

.

0
points

.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.