GLib的GHashTable线程安全是否可以从多个线程进行只读访问?

时间:2018-01-09 17:43:14

标签: c multithreading glib

我想在程序的初始化中创建一个GHashTable,稍后可以同时访问它以仅由新创建的线程读取。

没有锁定这样做是否安全?

2 个答案:

答案 0 :(得分:2)

通常,只有在您可以在另一个线程中读取或修改数据的同时修改数据时,才需要进行互斥。如果所有访问(在初始化期间填写哈希表之后)只是读取,则不需要锁定。

答案 1 :(得分:1)

严格来说,C不做任何保证,除非你有某种类型的同步,一个线程写的数据对其他人来说是可见的或连贯的。

您需要使用"发布"进行内存操作。设置哈希表后的语义,以及"获取"在读取之前,其他线程中的语义。

在创建哈希表之后创建读取线程可能已经足够了,尽管我并不是100%肯定这一点。