뮤텍스가 신비하게 행동하는 취미 프로젝트에 참여하고있었습니다. 분명히 교착 상태에 빠질 수있는이 테스트 케이스로 끓였습니다. 나는 -lpthread
플래그없이 컴파일 할 때gcc가 lpthread 플래그없이 링크되는 이유는 무엇입니까?
#include <pthread.h>
#include <stdio.h>
int main() {
pthread_mutex_t test;
pthread_mutex_init(&test, NULL);
pthread_mutex_lock(&test);
pthread_mutex_lock(&test);
printf("Took lock twice\n");
return 0;
}
그러나 프로그램이 여전히 컴파일하지 않습니다 만 링크, 또한 교착없이 실행됩니다. 왜?
gcc pthread_break.c -o pthread_test -lpthread
./pthread_test
<- deadlocked here
내가 GCC 버전 7.2.0을 실행하는거야 다음 -lpthread
플래그를 사용하여 컴파일
gcc pthread_break.c -o pthread_test
./pthread_test
Took lock twice
는 예상 결과를 얻을 수 있습니다.
pthread 스텁 함수를 제공하기 위해 약한 기호로 구현 된 glibc.so의 pthread가 가능한가요?] (https://stackoverflow.com/questions/21092601/is-pthread-in-glibc-so-implemented-by -weak-symbol-to-provide-pthread-stub-functi) – Lanting
관련 질문 그러나 중복 질문. –
어떤 플랫폼을 사용하고 있습니까? 표준 라이브러리에 Pthread 함수 또는 더미 버전이 포함되어있어 "구현되지 않은"오류가보고 될 수 있습니다. 모든 종료 코드를 철저히 점검하고 오류를 신중하게보고합니까? –