对于多线程的只读访问,GLib 的 GHashTable 是线程安全的吗?
Is GLib's GHashTable thread-safe for read-only accesses from multiple threads?
我想在程序初始化时创建一个GHashTable,以后只供新创建的线程并发访问以供读取。
不上锁这样做安全吗?
一般来说,只有当您可以在另一个线程中读取或修改数据的同时修改数据时,才需要互斥。如果所有的访问(初始化时填入hashtable后)都只是读,就不需要加锁了
严格来说,C 不保证,除非你有某种 同步,一个线程写入的数据将对其他线程可见或一致。
在设置散列 table 之后,您需要一个具有 "release" 语义的内存操作,并且在其他线程读取它之前需要一个具有 "acquire" 语义的内存操作。
在创建哈希 [=20=] 之后创建读取线程可能就足够了,尽管我不是 100% 确定这一点。
我想在程序初始化时创建一个GHashTable,以后只供新创建的线程并发访问以供读取。
不上锁这样做安全吗?
一般来说,只有当您可以在另一个线程中读取或修改数据的同时修改数据时,才需要互斥。如果所有的访问(初始化时填入hashtable后)都只是读,就不需要加锁了
严格来说,C 不保证,除非你有某种 同步,一个线程写入的数据将对其他线程可见或一致。
在设置散列 table 之后,您需要一个具有 "release" 语义的内存操作,并且在其他线程读取它之前需要一个具有 "acquire" 语义的内存操作。
在创建哈希 [=20=] 之后创建读取线程可能就足够了,尽管我不是 100% 确定这一点。