g_hash_table and OpenMp
g_hash_table and OpenMp
g_hash_table_lookup
和g_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 编译指示?有时我在那个循环中遇到错误。单线程版本工作正常。
No. 从 GLib 参考手册的线程部分:
GLib 本身在内部是完全线程安全的(所有全局数据都会自动锁定),但由于性能原因,单个数据结构实例不会自动锁定。例如,您必须协调从多个线程对同一 GHashTable 的访问。此规则的两个值得注意的例外是 GMainLoop 和 GAsyncQueue,它们是线程安全的,不需要进一步的应用程序级锁定即可从多个线程访问。大多数 refcount 函数(如
g_object_ref()
)也是线程安全的。
相关文章:
- OpenMP阵列性能较差
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- OpenMP:并行更新数组总是需要减少数组吗
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- Visual Studio C++ 2015 and openMP
- Openmp with ofstream and system command
- OpenMP and sections
- g_hash_table and OpenMp
- htop and OpenMP threads
- OpenMP and NUMA relation?
- OpenMP min reduction and std::min
- OpenMP, QTextEdit and QPlainTextEdit
- OpenMP and #pragma omp atomic