최근의 GTK 3.22는 아직 Boehm GC에 우호적인가(스레드 문제)?
Boehm의 보수적인 가비지 콜렉터는 특히 Linux에서 유용합니다(예를 들어 Bigloo가 사용하고 있거나 Guile이 유사한 것을 사용하고 있는 경우 등).그것이 중요한 경우 Debian/Sid/x86-64를 사용하고 있습니다.libgc-dev
패키지는 버전입니다.1:7.4.2-8
따라서 Boehm GC는 7.4.2)입니다.
그러나 Boehm의 GC는 이를 사용하는 모든 스레드를 인식해야 합니다.gc_pthreads_redirects.h(다소 내부) 헤더 파일은 다음과 같이 재정의됩니다.
# define pthread_create GC_pthread_create
실제로 Boehm의 GC가 필요로 하는 것은 새로운 스레드콜 스택의 초기에 호출되는 GC_register_my_thread입니다.GC_pthread_create
그렇게 하고 있습니다).
Glib(2.46)는 더 이상 사용할 수 없는 메모리 할당을 재정의하는 방법을 제공했습니다(내 Debian).libglib2.02.0-dev
패키지는 버전입니다.2.50.3-2
글로벌 부울이 있지만 Glib 소스 코드를 조사하면 메모리존을 클리어하고 나서 해방됩니다.
최신 GTK3 (마이)libgtk-3-dev
패키지에 버전이 있습니다.3.22.11-1
)는 (간접적으로)를 사용하여 스레드(Dbus와 관련된 것으로 생각되며 GtkTextView와 관련된 것으로 생각됨)를 작성합니다.pthread_create
Glib 스레드 기능을 사용합니다.또한 (소스 코드를 패치하는 것 이외에는) 스레드 작성에 대해 통지할 방법이 없습니다.(예를 들어 를 사용하여) 설치하는 GTK 콜백은 이러한 스레드에서 호출될 수 있습니다.또는 GTK 위젯을 사용(또는 액세스)할 수 있는 방법으로 하위 분류하는 경우GC_malloc
-ed 버퍼에 문제가 있을 수 있습니다.
한편, GTK 에서는, 모든 GTK 조작은 메인 스레드만으로 행해져야 한다는 강력한 코딩 룰이 있습니다.Gdk3 스레드 페이지를 인용하려면:
그러나 GTK+는 스레드 세이프가 아닙니다.스레드에서 GTK+ 및 GDK만 사용해야 합니다.
gtk_init()
그리고.gtk_main()
호출되었습니다.이것은 통상 「메인 스레드」라고 불립니다.
제가 이 규칙을 따를 경우, 내부 GTK 코드는 (Boehm GC를 사용하여) 비메인 스레드에서 콜백을 호출하지 않습니다.
내 직감으로는 만약 그렇다면GC_alloc
메인 스레드 외부에서 GTK 내부(내 코드에 의해 직접 호출되지 않음)에 의해 재해가 발생합니다(이러한 GTK 내부 스레드가 시작되어 있지 않기 때문에).GC_pthread_create
기존 GTK 위젯을 서브클래스하고 있거나 메인 스레드 이외의 GTK 및 Boehm GC를 사용하여 직접 코드를 작성하지 않아도 GTK 신호를 연결했기 때문에 코드가 호출될 수 있습니다).
핵심은 Boehm의 GC가 모든 스레드의 스택을 스캔해야 한다는 것입니다.
FWIW, GTK bugzilla에서 버그 #780815가 발생할 수 있다고 보고했습니다.
대표적인 예는 다음과 같습니다.gtk+-3.22.11/examples/application9/
GTK-3.22.11 타르볼 pthread_create
에 의해 매우 간접적으로 불리고 있다.g_application_run
★★★★★★★★★★★★★★★★★를 통해g_bus_get_sync
언급URL : https://stackoverflow.com/questions/43141659/is-recent-gtk-3-22-still-boehm-gc-friendly-thread-issue
'IT이야기' 카테고리의 다른 글
하위 경로가 여전히 상위 구성 요소만 로드하고 있습니다. (0) | 2022.06.25 |
---|---|
VueJS - 이행 그룹이 컴포넌트 리스트의 초기 렌더링을 애니메이션화하고 있습니다.이러한 프로포절은 false입니다. (0) | 2022.06.25 |
Vue 2.3 컴포넌트의 2방향 바인딩 (0) | 2022.06.25 |
늘 레이아웃을 사용하여 JPanel에서 JTable을 추가하려면 어떻게 해야 합니까? (0) | 2022.06.25 |
vuejs 2 매개 변수가 사용될 때 vuex에서 저장소 값을 감시하는 방법 (0) | 2022.06.25 |