我有一个用C语言编写的多线程程序,一个线程从网络接收组播数据并将其存储在队列中,另一个线程不断读取队列并将其写入文件。一切工作正常,即没有数据从组播网络丢失。
线程1:读取多播数据并将其存储到队列中线程2:从队列读取并将其写入文件。
现在我有了另一个来自网络的多播数据源,我需要另一个线程来读取网络数据,然后我只需要添加一个for循环来为多播数据创建另一个线程,然后当两个多播线程来回切换时,我就会丢失来自多播网络的数据!
如果使用两个线程,任何人都知道为什么会有丢失的数据报。谢谢
发布于 2011-04-13 08:35:28
您很可能没有使用任何并发机制,如信号量或互斥。经典的解决方案是监视器。监视器提供一个锁来协调并发访问和条件信号,以允许独立的进程阻塞访问(无忙碌等待)。简单地说,这意味着一次只能有一个线程访问数据。这防止读线程读取写线程尚未完成写的数据。它还允许读取线程读取其他读取线程尚未读取的数据。实现这一点的一种方法是使用读写互斥锁和访问信号量。每个想要访问数据的线程都会减少访问信号量,该线程将被授予访问权限或休眠,直到它得到它。读写互斥锁将阻止读线程读取,直到一些数据被写入。
https://stackoverflow.com/questions/5619576
复制相似问题