2

スレッド セーフに関する glib ドキュメントに情報が見つかりませんでした。つまり、おそらくスレッドセーフではないと想定する必要があると思いますが、どの共有リソースをロックする必要があるのか​​ わかりません。

glib を使用したスレッド セーフの経験がある人はいますか? glib コードがスレッドセーフであることを確認するために、どのガイドラインを使用できますか?

ありがとう!

4

3 に答える 3

5

実際、glib リファレンス マニュアルには、スレッド セーフに関する情報が満載です。

g_thread_init() を呼び出した後、GLib は完全にスレッド セーフになります (すべてのグローバル データは自動的にロックされます) が、パフォーマンス上の理由から、個々のデータ構造インスタンスは自動的にロックされません。したがって、たとえば、複数のスレッドから同じ GHashTable へのアクセスを調整する必要があります。この規則からの 2 つの注目すべき例外は、GMainLoop と GAsyncQueue です。これらはスレッドセーフであり、複数のスレッドからアクセスするためにアプリケーション レベルのロックを追加する必要はありません。

リファレンス マニュアルのスレッド セクションを参照してください。

于 2012-04-11T08:35:25.053 に答える
0

グローバルポリシーは単純です。データ操作機能を除いて、すべてがスレッドセーフです。そこを読んでください:http://developer.gnome.org/glib/stable/glib-programming.html

于 2012-11-10T14:28:41.710 に答える
0

GLib リファレンス マニュアルから、次のステートメントを取得できます。

GLib 自体は内部的に完全にスレッドセーフです (すべてのグローバル データは自動的にロックされます) が、個々のデータ構造インスタンスはパフォーマンス上の理由から自動的にロックされません。

したがって、前の回答を補完するために、 を呼び出す必要はありませんg_thread_init()

于 2019-10-14T07:03:08.763 に答える