【发布时间】:2009-11-11 02:25:13
【问题描述】:
我将一些数据写入管道 - 可能是大量数据并且以随机间隔写入。如何从管道中读取数据?
这样可以吗:
- 在主线程(当前进程)中再创建两个线程(2、3)
- 第二个线程有时会写入管道(并刷新管道?)
- 第三个线程有无限循环读取管道(然后休眠一段时间)
到目前为止,这是否正确?
现在,有几件事我不明白:
- 是否必须在写入时锁定(互斥?)管道?
- IIRC,当写入管道并且其缓冲区已满时,写入端将阻塞,直到我读取已经写入的数据,对吗?如何检查管道中的读取数据,不是太频繁,也不是太少?所以第二个线程不会阻塞?有类似
select的管道吗? - 可以将管道设置为无缓冲更多,或者我必须定期冲洗它 - 哪个更好?
- 是否应该再创建一个线程,仅用于在写入后刷新管道?因为刷新块也是如此,当缓冲区已满时,对吗?我只是不想让第一个和第二个线程阻塞....
[编辑] 抱歉,我认为这个问题与平台无关,但以防万一:我从 Win32 的角度来看这个问题,可能是 MinGW C...
【问题讨论】:
-
这些都是很好的问题。如果您将它们分解为自己的问题并提供您正在考虑的方法的代码 sn-ps,您将获得更好的响应。此外,您没有提及任何有关语言或平台的内容。
-
同意凯利。我们需要更多的信息。所有这些问题都可能有特定于平台和语言的答案。此外,您打算用于“管道”的数据结构将是有用的信息。
-
哦,对不起,我认为平台并不是那么重要,因为我认为问题在于技术。但我刚刚更新了问题,谢谢你的建议。而数据结构是什么,只有缓冲区,它只是一个数组....
标签: multithreading