안녕하세요.
혹시나 경험해 보신 분이 있을까 해서 글 올립니다.
GNU Library 관련 사이트에서 비슷한 경우의 글을 봤는데 답은 없더라구요.
혹시 피해가는 방법이나 원인을 아시는 분은 도움 주시면 좋겠습니다.
(시스템)
Linux q2040 2.4.18-3smp #2 SMP i686 unknown (intel 2 CPUs)
glibc-2.2.93-5 or glibc-2.2.5-34 에서 모두 발생. (glibc 버젼과는 무관한 것 같음)
multi-threaded program.
(현상)
특정 mutex에서 threads들이 stuck 되면서 deadlock 상태에 빠짐.
(부연 설명)
+ mutex의 초기화나 lock/unlock은 모두 정상적으로 구현 됨.
+ Sun Solaris에서 정상적으로 실행되면 소스를 Linux로 porting 하는 과정에서
멀티쓰레드 프로그램에서만 발생.
유사한 문제가 보고 된 경우는 아래의 링크에서 찾을 수 있었으며
보다 Technical한 내용이 필요하면 참고하시면 됩니다.
http://sources.redhat.com/ml/bug-glibc/2002-10/msg00037.html--Kim Gun Soo.
glibc 2.2 의 LinuxThreads 에서는 mutex 사용에 몇 가지 알려진 문제가 있습니다. 링크한 버그 리포트처럼 pthread_mutex_lock 이 데드락처럼 보일 수 있는데, 대개 프로그램 설계(락 순서, 시그널 안전성)가 원인입니다.
해결은 gdb 로 각 스레드의 backtrace 를 확인하고 NPTL 이 있는 최신 환경(레드햇 9 이후)에서 시험하는 것입니다.