线程安全的队列实现

4
在我的应用程序中,我有两个线程和一个主线程。
其中一个线程是在中断发生时从I/O模块获取数据(4096字节到缓冲区)。另一个线程是消耗这些数据(处理、格式化并将数据写入文件)。
最好的方法是什么?
我不能从生产者线程丢失数据,因为它发生得非常快。
如果有任何示例可以供我参考,将不胜感激。
我正在尝试实现线程安全队列,但遇到了困难。
抱歉,我忘记包括平台和其他信息。我使用的是Windows XP(32位)和Microsoft Visual Studio 5.0编译器。

1
这将取决于您计划针对的操作系统/平台。据我所知,C语言没有提供标准的线程原语。(最接近它的可能是pthread,但并非在每个平台上都可用。) - In silico
1
嗯,c11提供了线程支持,但是支持有点间歇性,我们可以这么说 :-) - paxdiablo
1
你确切地使用了哪个平台/架构/编译器? - David Grayson
5
这被称为“生产者-消费者问题”。在网上搜索它应该会提供许多不同的算法来解决这个问题,以及常用编程语言和平台的许多实现。 - Jens Gustedt
3
如果你打算在每一边都只使用一个线程,那么循环环形缓冲区将是最简单的解决方案。新的Linux发行版提供了http://linux.die.net/man/3/vrb,对于这些目的非常方便。但是,一旦你需要多个线程访问任一侧,你就必须开始处理锁和同步。 - Sergey L.
1个回答

1

我假设你们都在使用 POSIX 平台。

请使用 互斥锁

这样消费者就可以在生产者盲目的时候拿到 grub 了。

对于隐喻表示抱歉。


@fork0 - 哎呀,帖子已经修改过了。 - Ed Heal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接