【发布时间】:2010-11-15 19:19:45
【问题描述】:
我正在使用 pthreads 开发一个多线程 C 应用程序。我有一个写入数据库的线程(数据库库只能在单个线程中安全使用),还有几个线程正在收集数据,处理它,然后需要将结果发送到数据库线程进行存储。我在提到过在 C 中创建一个多写入器安全队列是“可能的”,但是我看到的每个地方都只是说它“对于这个例子来说太复杂了”并且仅仅演示了一个单写入器安全队列.
我需要以下东西:
- 高效插入和移除。我假设像任何其他队列一样,O(1) 入队和出队是可能的。
- 动态分配的内存,即链接结构。我不需要对队列的大小有任意限制,所以数组真的不是我想要的。
编辑: 读取线程不应该在空队列上旋转,因为可能有几分钟的时间没有写入,大量写入的短脉冲。
【问题讨论】:
-
当你说“multiple-writer”时,你的意思是你希望队列支持来自多个线程的 push() 和 pop()?
-
您在寻找无锁/无锁实现吗?
-
您是指一个队列,其中两个或多个写入线程同时添加到队列中,还是一个队列有多个可能的写入线程,但一次只有一个写入队列?跨度>
-
- 多个编写器意味着多个 push()-ing 线程。 - 无论如何都不需要无锁,但会很好。 - 并发写入是完全可能的,尽管可能性不大。 (即没有隐含的保证不会有并发写入,但如果一个或多个块直到一个完成,这不是一个大问题。)
-
顺便说一句,人们可能没有发布实现的一个原因是这种代码很烦人,但用 C 编写并不难。在 C++ 中要简单得多。如果你不完全依赖 C,我建议改变。
标签: c thread-safety queue pthreads