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?
-
Compacte os arquivos (os dados XML, em particular, compactam ~ 10: 1 com Zip).
-
Divida os arquivos em partes (um incômodo, mas aplicável a qualquer tipo de arquivo).
-
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.