Quando uma thread de prioridade mais alta entra no estado de pronto, o sistema operacional geralmente faz preempção da thread atualmente em execução.

Dependendo do SO, as threads de prioridade mais alta poderiam adiar, possivelmente por um tempo indefinido, a execução de thread de prioridade mais baixa. Esse adiamento indefinido é conhecido pelo nome de inanição ou starvation.

É importante não confundir essa definição com outro problema muito comum em programação concorrente/paralela que é o deadlock. Deadlock ocorre quando os processos/threads permanecem bloqueados indefinidamente uns pelos outros aguardando a liberação (que nunca acontece) de recursos por eles alocados.

É obvio que para ambos os problemas, a consequência imediata é a não execução do programa. Contudo, o programa que se encontra em starvation pode se autorrecuperar, desde que o estado do ambiente mude para uma condição que lhe seja favorável (lembre que isso pode levar pouco tempo ou muito tempo, ou seja, o tempo de espera é indefinido), enquanto que no deadlock essa autorrecuperação do programa não é possível. A recuperação de um programa em deadlock deve ser feito por uma intervenção externa ao processo para que o mesmo volte a funcionar.

Ambos os problemas são complexos e difíceis de identificar, uma vez que suas características não se apresentam de modo regular e constante. Ou seja, um programa que possua qualquer um dos problemas citados pode eventualmente, sob determinadas circunstâncias, apresentar o problema ou não. Isso significa que o programa pode funcionar em determinados momentos e em outros não.

Copyright © 2016 AIEC.