Fala ai Radizeiro e Radizeira, tudo bem com você?

No post anterior eu falei um pouco sobre a utilização de semáforo usando Thread, e no post de hoje estarei dando continuidade mostrando mais sobre esse assunto que irá lhe ajudar muito.

Mas você sabe o que é semáforo?

Semáforo, é um conceito criado por Dijkstra para solucionar conflitos de acessos concorrentes a um mesmo recurso por processos distintos.

Uma analogia para semáforo, seria uma boate: Ela contém uma capacidade máxima e que é assegurada pelo porteiro/segurança. Uma vez que a capacidade é atingida, ninguém pode entrar e se começa a formar filas na porta. Então, para cada indivíduo que deixa a boate, um outro tem sua passagem permitida a partir do início da fila.

E seguindo a nossa série não podia faltar a utilização da classe monitor.

Esse camarada, diferente do Critical Section, ele não necessita que criemos a classe, porque ele é um record.

Dessa forma fica mais limpo o nosso código.

procedure TForm1.Button3Click(Sender: TObject);
begin
    TThread.CreateAnonymousThread(
    procedure
    begin
        System.TMonitor.Enter(FDQuery);
        try
            TThread.Sleep(1000);
            TThread.Synchronize(TThread.CurrentThread,
            procedure
            begin
                BuscarDados('SELECT * FROM CLIENTE');
            end);
        finally
            System.TMonitor.Exit(FDQuery);
        end;
        end).Start;

        TThread.CreateAnonymousThread(
        procedure
        begin
            System.TMonitor.Enter(FDQuery);
            try
                TThread.Sleep(1000);
                TThread.Synchronize(TThread.CurrentThread,
                procedure
                begin
                    BuscarDados('SELECT * FROM MENSAGERIA');
                end);
            finally
                System.TMonitor.Exit(FDQuery);
            end;
        end).Start;
end;

Observe que no código acima eu tive que declarar o System, porque existe uma outra classe na biblioteca da VCL que se chama TMonitor, então ele da um conflito e não consegue encontrar o Monitor que eu quero.

Então quanto eu preciso declaro como no código acima. 

Na imagem abaixo vocŝ pode ver a quantidade de processos de monitoramento.

Dentro do Enter do TMonitor eu passei o FDQuery, nesse caso estou informando que  irei monitorar.

Executo todo o processo de consulta ao banco de dados, e no finally eu dou um Exit passando essa minha query.

Viu como é simples e fácil a utilização do monitor nas Thread?

A grande questão mesmo é a lógica, porque quando você sai do processamento contínuo, em fila, e você vai para o paralelismo, ai tem muita coisa acontecendo ao mesmo tempo.

Manter uma lógica, e uma ordem disso, aí é um pouco complexa, e a lógica na hora de programar em Thread que irá demandar o seu sucesso ou o seu fracasso na hora de usar Thread.

Esse é um dos conteúdos que você pode encontrar completo dentro do CLUBE DOS PROGRAMADORES EM DELPHI, o maior acervo de conteúdos em Delphi.

E caso você tenha interesse de conhecer mais sobre PPL acessa o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI, onde você não só terá conteúdos relacionados aos generics, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.

CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI