C 用GLib对内存块进行引用计数

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++)

我从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++) {
     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

谢谢!这正是我所需要的,一开始我就逃避了。