スレッド セーフに関する glib ドキュメントに情報が見つかりませんでした。つまり、おそらくスレッドセーフではないと想定する必要があると思いますが、どの共有リソースをロックする必要があるのか わかりません。
glib を使用したスレッド セーフの経験がある人はいますか? glib コードがスレッドセーフであることを確認するために、どのガイドラインを使用できますか?
ありがとう!
スレッド セーフに関する glib ドキュメントに情報が見つかりませんでした。つまり、おそらくスレッドセーフではないと想定する必要があると思いますが、どの共有リソースをロックする必要があるのか わかりません。
glib を使用したスレッド セーフの経験がある人はいますか? glib コードがスレッドセーフであることを確認するために、どのガイドラインを使用できますか?
ありがとう!
実際、glib リファレンス マニュアルには、スレッド セーフに関する情報が満載です。
g_thread_init() を呼び出した後、GLib は完全にスレッド セーフになります (すべてのグローバル データは自動的にロックされます) が、パフォーマンス上の理由から、個々のデータ構造インスタンスは自動的にロックされません。したがって、たとえば、複数のスレッドから同じ GHashTable へのアクセスを調整する必要があります。この規則からの 2 つの注目すべき例外は、GMainLoop と GAsyncQueue です。これらはスレッドセーフであり、複数のスレッドからアクセスするためにアプリケーション レベルのロックを追加する必要はありません。
リファレンス マニュアルのスレッド セクションを参照してください。
グローバルポリシーは単純です。データ操作機能を除いて、すべてがスレッドセーフです。そこを読んでください:http://developer.gnome.org/glib/stable/glib-programming.html
GLib リファレンス マニュアルから、次のステートメントを取得できます。
GLib 自体は内部的に完全にスレッドセーフです (すべてのグローバル データは自動的にロックされます) が、個々のデータ構造インスタンスはパフォーマンス上の理由から自動的にロックされません。
したがって、前の回答を補完するために、 を呼び出す必要はありませんg_thread_init()
。