1

У меня есть некоторый личный опыт с ошибкой периода ожидания семафора. Мне удалось устранить ошибку, но это все еще заставляло меня задаться вопросом, что в мире означает "период ожидания семафора"?«Как я могу предотвратить это? Почему это происходит только тогда, когда речь идет о больших объемах передачи данных?

2 ответа2

1

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

Поток должен проверить семафор, используя функцию ожидания, чтобы увидеть, свободен ли объект. Однако для обработки взаимоблокировок, если один поток не сможет освободить семафор, функции ожидания могут указать конечное время ожидания, сообщение, которое вы видите. Если передача занимает слишком много времени, то семафор, управляющий им, истекает.

Для получения дополнительной информации см. Функцию WaitForSingleObject или многопотоковое программирование C++ Tutorial.

Итак, что вы можете сделать в реальной ситуации при передаче больших файлов по сети с ограниченной пропускной способностью?

  1. Сжатие файлов (данные XML, в частности, сжимают ~ 10:1 с помощью Zip).

  2. Разбейте файлы на куски (неприятно, но применимо к любому типу файлов).

  3. Улучшить пропускную способность. Например, я обнаружил, что SSH/SFTP очень медленно работает на старом сервере, но при добавлении ОЗУ данные передаются быстрее.

-1

Я использовал решение для тайм-аута - я делал резервную копию своего HD на внешний диск и продолжал получать ошибку тайм-аута семафора и нашел предложение изменить USB-соединение и успех. Проблема исчезла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .