关于 C 中的调用,我想让我的概念更清晰一些malloc()
。我有一个多线程应用程序,其中主线程生成任意数量的工作线程(pthreads)。然后每个工作线程运行一个无限函数(包含的函数来自另一个.c
文件并实现了一段时间(1)),它负责持续的网络 I/O。
对于每个线程,我都需要一个哈希表,所以我使用了 glib 提供的哈希映射。我所做的是我在每个线程的函数中初始化了一个哈希映射,它在后端为结构分配一些初始内存,然后它可以随着需要的增加而增长。
现在,当我运行应用程序时,它会抛出错误,包括分段错误和无法为结构分配任何内存。我花了一段时间才发现错误是由于无法为哈希映射分配内存。我的想法是(仍然认为)每个线程都有自己的内存空间,它会在自己的内存块内为其各自的哈希映射分配一块内存。我能够通过mutex
在哈希映射初始化之前和之后使用锁来修复错误,例如(sudo 代码):
lock mutex
initialize hashmap
unlock mutex
初始化在每个线程中调用的哈希映射的代码是:
GHashTable *g_hash_table;
g_hash_table = g_hash_table_new (g_int_hash, g_int_equal);
虽然它解决了问题,但在此之后我有点困惑。为什么在不使用锁定的情况下会出现此问题,因为每个线程都有自己的内存空间用于其实现的功能,并且在分配自己的内存时不应与其他线程冲突。非常感谢所有指导。
谢谢。