Многоадресная программа потеряла данные - PullRequest
1 голос
/ 11 апреля 2011

Моя многопоточная программа написана на C, один поток получает многоадресные данные из сети и сохраняет их в очереди, другой поток продолжает читать очередь и записывать ее в файл. Все работает просто отлично, то есть данные не теряются из многоадресной сети.

Тема 1. Считайте данные многоадресной рассылки и сохраните их в очереди. Поток 2: чтение из очереди и запись в файл.

теперь у меня есть другой источник многоадресных данных из сети, мне нужен другой поток для чтения сетевых данных, затем я просто добавляю цикл for, чтобы создать другой поток для многоадресных данных, затем, когда 2 многоадресных потока переключаются обратно и Я потерял данные из многоадресной сети!

Каждый имеет представление о том, почему теряются дейтаграммы, если используются 2 потока. Спасибо

1 Ответ

0 голосов
/ 13 апреля 2011

Вероятно, вы не используете какие-либо механизмы параллелизма, такие как семафор или мьютекс.Классическим решением является монитор.Монитор обеспечивает блокировку для передачи сигналов одновременного доступа и условий, чтобы разрешить независимым процессам блокировать доступ (без ожидания ожидания).В простом английском это означает, что только один поток может получить доступ к данным одновременно.Это не позволяет потоку чтения читать данные, которые поток записи еще не закончил писать.Это также позволяет потокам чтения читать данные, которые другой поток чтения еще не прочитал.Подход для реализации этого заключается в использовании мьютекса чтения-записи и семафора доступа.Каждый поток, который хочет получить доступ к данным, уменьшает семафор доступа, потоку будет либо предоставлен доступ, либо он будет находиться в спящем режиме, пока не получит свой ход.Мьютекс чтения-записи будет препятствовать чтению потока чтения до тех пор, пока не будут записаны некоторые данные.

...