【发布时间】:2012-08-28 14:40:06
【问题描述】:
在 C 中,我有几个线程产生 long 值,一个线程消耗它们。因此,我需要一个以与Wikipedia implementation 类似的方式实现的固定大小的缓冲区,以及以线程安全方式访问它的方法。
在一般层面上,应满足以下条件:
- 当添加到一个完整的缓冲区时,线程应该被阻塞(不会覆盖旧值)。
- 消费者线程应该被阻塞,直到缓冲区满 - 它的工作有很高的固定成本,应该做尽可能多的工作。 (这是否需要双缓冲解决方案?)
我想使用一个尝试过的实现,最好来自一个库。有什么想法吗?
动机和解释:
我正在编写处理删除global references 在堆对象中保留为tags 的JNI 代码。
当ObjectFree JVMTI 事件发生时,我得到一个long 标记,表示我需要使用DeleteGlobalRef 释放的全局引用。为此,我需要一个 JNIEnv 参考 - 获得它真的成本很高,所以我想缓冲请求并一次删除尽可能多的请求。
可能有很多线程接收ObjectFree事件,并且会有一个线程(我的)做引用删除。
【问题讨论】:
标签: c data-structures buffer