我有一个用C编写的多线程程序,一个线程正在从网络接收组播数据并将其存储在队列中,另一个线程继续读取队列并将其写入文件。一切都很好,即多播网络没有数据丢失。
线程1:读取多播数据并将其存储到队列中 线程2:从队列中读取并将其写入文件。
现在我有来自网络的另一个组播数据源,我需要另一个线程来读取网络数据,然后我就去添加一个for循环来创建另一个用于组播数据的线程,然后当2个组播线程切换回来时我丢失了多播网络中的数据!
如果使用了2个线程,任何人都知道为什么会丢失数据报。谢谢
答案 0 :(得分:0)
您可能没有使用任何并发机制,如信号量或互斥量。经典的解决方案是显示器。监视器提供锁定以调解并发访问和条件信号,以允许独立进程阻止访问(无需忙碌等待)。简单来说,这意味着一次只能有一个线程访问数据。这可以防止读取线程读取写入线程尚未完成写入的数据。它还允许读取线程读取另一个读取线程尚未读取的数据。实现此方法的方法是使用读写互斥锁和访问信号量。每个想要访问数据的线程都会减少访问信号量,线程将被授予访问权限或睡眠状态,直到它转向。读写互斥锁将阻止读取线程读取,直到写入一些数据为止。