C 用GLib对内存块进行引用计数
我从GLib开始,希望使用它的GObject引用计数功能来跟踪线程之间共享的内存何时可以释放。我的用例如下所示:C 用GLib对内存块进行引用计数,c,glib,reference-counting,C,Glib,Reference Counting,我从GLib开始,希望使用它的GObject引用计数功能来跟踪线程之间共享的内存何时可以释放。我的用例如下所示: void sending_function() { char *msg = create_message(); // Allocates some memory at the heap. GObject *container = g_holds_my_pointer(msg, free); for (int i = 0; i < num_threads; i++)
void sending_function() {
char *msg = create_message(); // Allocates some memory at the heap.
GObject *container = g_holds_my_pointer(msg, free);
for (int i = 0; i < num_threads; i++) {
g_object_ref(container);
sends_to_other_thread(other_thread, container);
}
}
void *other_thread(void *data) {
GObject *container = data;
char *msg = container->data;
// Do something with msg...
g_object_unref(container); // When the reference count reaches zero, frees msg.
}
void发送函数(){
char*msg=create_message();//在堆中分配一些内存。
GObject*container=g_保存我的指针(msg,free);
对于(inti=0;i数据;
//用味精做点什么。。。
g_object_unref(container);//当引用计数为零时,释放消息。
}
是否存在一个简单的容器对象,它持有一个指针,并在其引用计数达到0后对其调用free?我曾尝试将GPtrArray与单个元素一起使用,但容器不是要进行引用计数的GObject。另外,我不想仅针对这个用例声明一个完整的GObject样板文件
我认识到这是一件自己实现的简单事情——创建一个包含指针和原子计数器的结构——但如果可能的话,我更喜欢一个已经测试过的实现。GByteArray用于可变数据,GBytes用于不可变数据。两者都不是gobject,但都是引用计数的
在分配期间,GLib的参考计数框可用于将(隐藏的)参考计数与plan C数据结构相关联 可以使用
g\u rc\u box\u alloc(size\u t)
或g\u rc\u box\u new(type)
分配内存
可以使用以下方法管理引用计数:
g_rc_box_acquire(ptr) // Increment refcount
g_rc_box_release(ptr) // Decrement refcount, free the memory if refcount became 0
谢谢!这正是我所需要的,一开始我就逃避了。