| [ 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(); //데이타를 로그파일에 쌓음. } } 그럼, 좋은 하루되세요. |