O que é um “período de tempo limite do semáforo?”

1

Tenho alguma experiência pessoal com o erro de período de tempo limite do semáforo . Consegui resolver o erro, mas isso ainda me deixou perguntando: o que no mundo é um "período de tempo limite de semáforo"? Como posso evitar que isso aconteça? Por que isso só acontece quando grandes transferências de dados estão em questão?

    
por Community 08.05.2016 / 22:15

2 respostas

1

Um semáforo (e um mutex) é um objeto de sincronização , usado para se comunicar entre vários processos compartilhando um recurso. Por exemplo, se você tivesse vários encadeamentos executando verificações de divisão para primality, você desejaria atribuir diferentes divisores após cada teste ser concluído.

Um thread precisa verificar o semáforo usando um Função Wait para ver se o objeto está livre. No entanto, para lidar com deadlocks, caso um thread falhe ao liberar um semáforo, as funções wait podem especificar um time-out finito, a mensagem que você vê. Se uma transferência demorar muito, o controle do semáforo expirará.

Para mais informações, consulte WaitForSingleObject função , ou a Programação Multi-Threaded do C ++ Tutorial .

Então, o que você pode fazer em uma situação do mundo real ao transferir arquivos grandes em uma rede com largura de banda limitada?

  1. Compacte os arquivos (os dados XML, em particular, compactam ~ 10: 1 com Zip).

  2. Divida os arquivos em partes (um incômodo, mas aplicável a qualquer tipo de arquivo).

  3. Melhore a largura de banda. Por exemplo, achei o SSH / SFTP extremamente lento em um servidor antigo, mas quando a RAM foi adicionada, os dados foram transferidos mais rapidamente.

por 09.05.2016 / 00:03
-1

Eu tropecei na solução para o tempo limite - eu estava fazendo o backup do HD em uma unidade externa e continuei recebendo o erro de tempo limite semepore e encontrei uma sugestão para alterar a conexão USB e o sucesso. Problema desaparecido.

    
por 07.01.2018 / 04:37