在 C 语言中,我有几个线程产生 long
值,一个线程消耗它们。因此,我需要一个固定大小的缓冲区,以与维基百科实现类似的方式实现,以及以线程安全方式访问它的方法。
在一般层面上,应满足以下条件:
- 当添加到一个完整的缓冲区时,线程应该被阻塞(不覆盖旧值)。
- 消费者线程应该被阻塞直到缓冲区满——它的工作有很高的固定成本,应该做尽可能多的工作。(这是否需要双缓冲解决方案?)
我想使用一个尝试过的实现,最好来自一个库。有任何想法吗?
动机与解释:
我正在编写处理删除作为标记保存在堆对象中的全局引用的 JNI 代码。
当一个ObjectFree
JVMTI 事件发生时,我得到一个long
代表我需要释放的全局引用的标记DeleteGlobalRef
。为此,我需要一个JNIEnv
参考 - 获取它的成本非常高,所以我想缓冲请求并一次删除尽可能多的请求。
可能有很多线程接收ObjectFree
事件,并且会有一个线程(我的)进行引用删除。