배포판에 따라 실행되지 않는문제
#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}
댓글 달기