Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 线程安全队列实现_C_Multithreading - Fatal编程技术网

C 线程安全队列实现

C 线程安全队列实现,c,multithreading,C,Multithreading,在我的应用程序中,我有两个线程加上主线程 一个线程是在中断发生时从I/O模块获取数据(4096字节到缓冲区)。另一个线程是使用这些数据(处理和格式化数据并将其写入文件) 实现这一目标的最佳方法是什么 我不能从生产者线程中丢失数据,这会以很快的速度发生 任何我能研究的例子都将不胜感激 我正在尝试实现线程安全队列,但遇到了困难 很抱歉,我忘了包括平台和其他信息。 我使用的是windows xp(32位)和Microsoft visual studio 5.0编译器 我将假设您在POSIX平台上 使用

在我的应用程序中,我有两个线程加上主线程

一个线程是在中断发生时从I/O模块获取数据(4096字节到缓冲区)。另一个线程是使用这些数据(处理和格式化数据并将其写入文件)

实现这一目标的最佳方法是什么

我不能从生产者线程中丢失数据,这会以很快的速度发生

任何我能研究的例子都将不胜感激

我正在尝试实现线程安全队列,但遇到了困难

很抱歉,我忘了包括平台和其他信息。
我使用的是windows xp(32位)和Microsoft visual studio 5.0编译器

我将假设您在POSIX平台上

使用

然后,消费者可以在生产者失明的情况下偷取食物


很抱歉,这将取决于您计划针对的操作系统/平台。据我所知,C不提供标准的线程原语。(最接近它的东西可能是pthreads,但不是在每个平台上都可用。)好的,c11提供了线程,但支持是间歇性的:-)是的,您使用的是什么平台/体系结构/编译器?这被称为“生产者-消费者问题”。在web上搜索它应该会为您提供许多不同的算法来解决这个问题,并为常用的编程语言和平台提供许多实现。如果您希望每边都有一个线程,那么环形缓冲区将是最简单的解决方案。较新的Linux发行版为您提供了方便的解决方案。只要您需要多个线程来访问任意一方,您就必须开始处理锁和同步。@fork0-Oops。更正了帖子。