【发布时间】:2015-05-15 22:22:58
【问题描述】:
我需要在多线程应用程序中对队列/出队操作进行小代码重构。当前的实现是:
-
使用参数调用入队函数:
enqueue(obj_ptr item)其中 obj_ptr 是指向使用 shared_ptr 创建的类 obj 的指针。然后,给定的项目(类型 obj_ptr)在标准列表中排队
list<obj_ptr>然后简单地使用 front() 和 pop_front() 出列并进一步发送。在这个实现中一切正常。
-
我想做的是:
使用其 API 将这些项目排入特殊列表:
a_enqueue(void *buffer)所以我需要直接地址来缓冲。
我正在考虑使用:
item->get()
返回类型 obj 但是我只能出列 obj,而不是 obj_ptr 出列后的下一个操作(+ 我会关于类引用的松散信息,它会破坏多线程应用程序)
我正在考虑提供指向 obj_ref 项的列表指针:
a_enqueue(&item)
但是 item 是很久以前在某个函数中创建的,并且多次作为参数(而不是指针)放置,并且无法找到它的直接地址。
对我来说最好的方法是将缓冲区 obj (item->get()) 入队,然后出队并以某种方式找到我在 get 中使用的相同引用 obj_ptr item ()。可能吗?还有其他想法吗?
谢谢。
编辑:出队调用是:
a_dequeue(void **buffer)
【问题讨论】:
-
为什么要将原始指针加入队列?
-
关于队列的API
标签: c++ multithreading shared-ptr