CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): candor (깐돌)
날 짜 (Date): 2003년 3월 28일 금요일 오후 03시 15분 41초
제 목(Title): [Q]pthread동기화 문제



안녕하세요.

멀티CPU와 RedHat 7.2에서 pthread를 이용하여 데몬프로그램을
짜는데 동기화가 잘 안되네요.
아래 대략의 소스코드가 있는데 어느 부분이 잘못되었는지 
알려주시면 감사하겠습니다.

현상을 설명드리자면, client로 부터 수신한 내용을 
file에 write하는 5개의 thread가 있는데
writeLog1과 writeLog2의 순서가 뒤바뀐 
경우가 발생합니다.(데이타내부에 sequence를 넣어서 비교해보고 있습니다.)
즉 lock/unlock처리하면서 동기화가 되지 않고
있는데 어떻게 해결할수 있을까요?

1개의 thread가 해제되면서 wait queue에 있는 다음 thread가 순서대로 
오지 않은것 같기도 하고, 아니면 wait queue에 이미 순서가 뒤바뀌어서 
들어간것 같기도 하고 이건 어떻게 알 방법이 없나요?

void main()
{
  
  for( i=0;i<5;i++ ) {
pthread_create(threadId[i], &thread_attr,thread_func,NULL);
  }

}

void thread_func()
{

while(1) {
         recvfrom(); //read from client
        wirteLog1(); //데이타를 로그파일에 쌓음.
        //lock 처리 부분
       while(1){
            rtn=pthread_mutex_trylock();
            if( rtn != 0 ) {
                    if( tryCnt < 10 ) {
         tryCnt++;
         nanosleep(); //0.1 초 
         continue;
                   }
    else
          break;
}
else
    break;
         }

        writeFile(); //file에 write한다.
        //unlock
       pthread_mutex_unlock();
        wirteLog2(); //데이타를 로그파일에 쌓음.
    }

}

그럼, 좋은 하루되세요.


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.