2

マルチスレッドの C プログラムで、GLib の GList 機能 ( https://developer.gnome.org/glib/2.35/glib-Doubly-Linked-Lists.html#g-list-append ) を使用し、複数のスレッドが独自のスレッドを作成しました。リスト。アプリケーションが読み込まれるとすぐに、予期しないクラッシュが発生することがありました。スタック トレースは、glist_* 関数のクラッシュを次のようなメッセージで示しています。

(gdb) bt
#0  0x00007fffeb54a964 in g_slice_alloc () from /lib64/libglib-2.0.so.0
#1  0x00007fffeb52aac6 in g_list_append () from /lib64/libglib-2.0.so.0

または、次のようなメッセージ:

MEMORY-ERROR: [25628]: GSlice: assertion failed: sys_page_size == 0 Aborted (コア ダンプ)

(プロセス:15426): GLib-ERROR (再帰) **: gmem.c:157: 割り当てに失敗しました 137438953456 >bytes aborting... Aborted (コアダンプ)

私には、GList の導入がこのすべてのクラッシュを引き起こしたと信じるに足る理由があります。シングル スレッド プログラムでは、これらの問題は見たことがありません。

GList は本質的にスレッドセーフですか? そうでない場合、私は何をする必要がありますか?

4

4 に答える 4

1

GThread を使用していますか?:

g_thread_init() を呼び出した後、GLib は完全にスレッドセーフです。

このページを見てください

于 2013-05-16T06:40:36.657 に答える