g_hash_table和OpenMp

时间:2012-10-07 18:31:12

标签: c++ c openmp glib

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 pragma? 有时我在那个循环中遇到错误。一个线程版本工作正常。

1 个答案:

答案 0 :(得分:1)

没有。来自Threads section of the GLib Reference Manual

  

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