0

g_hash_table_lookupg_hash_table_insert线程安全吗?我可以使用这样的代码:

dict = g_hash_table_new();
for (i = 0; i < N; i++) {
    compute_A();
    find_hash_of_A();
    void *value = g_hash_table_lookup(dict, key);
    struct MyStruct *obj;
    if (!value) {
        obj = (struct MyStruct *)value;
    } else {
        compute_obj
        g_hash_table_insert(dict, key, obj);
    }
    do_something_with_obj
}

#pragma omp parallel for还是我需要使用其他一些 OpenMP 编译指示?有时我在那个循环中遇到错误。一个线程版本工作正常。

4

1 回答 1

1

否。来自GLib 参考手册的线程部分

GLib 本身在内部是完全线程安全的(所有全局数据都被自动锁定),但出于性能原因,个别数据结构实例不会自动锁定。例如,您必须协调多个线程对同一个GHashTable的访问。此规则的两个值得注意的例外是GMainLoopGAsyncQueue,它们是线程安全的,不需要进一步的应用程序级锁定来从多个线程访问。大多数引用计数函数,例如g_object_ref()也是线程安全的。

于 2012-10-07T19:01:26.383 回答