Problemão: Como assegurar a execução completa de uma thread
Olá pessoal!
Tenho um problemão! Espero que me ajudem.
Estou trabalhando com threads certo? Essas threads acessam uma matriz que é comum a todas elas. O problema é que quando uma thread estiver acessando essa matriz e por acaso perder o processador, a outra thread não poderá acessar a matriz. Tenho que garantir quan quando uma thread comece a fazer uso da matriz e perder o processador as outras threads não executem....
Espero ter sido claro não sei, mas teria que fazer algo assim(em alto nivel)
lock();
acesso a matriz
desLock();
Dai se no meio uma outra thread tentar acessar a amtriz naun vai conseguir pq ve que ela esta bloqueada.
Espero que consigam me ajudar....Preciso MUITO disso.
Desde já agradeço
samuel Gubert
Tenho um problemão! Espero que me ajudem.
Estou trabalhando com threads certo? Essas threads acessam uma matriz que é comum a todas elas. O problema é que quando uma thread estiver acessando essa matriz e por acaso perder o processador, a outra thread não poderá acessar a matriz. Tenho que garantir quan quando uma thread comece a fazer uso da matriz e perder o processador as outras threads não executem....
Espero ter sido claro não sei, mas teria que fazer algo assim(em alto nivel)
lock();
acesso a matriz
desLock();
Dai se no meio uma outra thread tentar acessar a amtriz naun vai conseguir pq ve que ela esta bloqueada.
Espero que consigam me ajudar....Preciso MUITO disso.
Desde já agradeço
samuel Gubert
Sgubert
Curtidas 0
Respostas
Maxwell_monteiro
12/05/2004
Bem quando uma thread pego o processador para ela mesma nada mais é executado no processador! a não ser que seja um Pentium Hyper Thread que trabalha com processamento paralelo em um unico computador!
mas bem na verdade o que vc gostaria era tornar as modificacoes feitas na matriz atomicas e para isso vc usa o metodo Synchronize da classe thread este metodo garante que quando vc executar sua função thread nenhuma outra thread interfira no desenrolar da funcao.
Exemplo
procedure Somar(x, y: integer);
begin
...
end;
procedure TMyThread.Execute;
begin
Synchronize(Somar(matriz[0][0], matriz[1][1]));
end;
mas bem na verdade o que vc gostaria era tornar as modificacoes feitas na matriz atomicas e para isso vc usa o metodo Synchronize da classe thread este metodo garante que quando vc executar sua função thread nenhuma outra thread interfira no desenrolar da funcao.
Exemplo
procedure Somar(x, y: integer);
begin
...
end;
procedure TMyThread.Execute;
begin
Synchronize(Somar(matriz[0][0], matriz[1][1]));
end;
GOSTEI 0