69
Controle de Concorrência Locks

Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Embed Size (px)

Citation preview

Page 1: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Controle de Concorrência

Locks

Page 2: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks

• Mecanismo de sincronização entre threads.

• Locks são utilizados há muitos anos em sistemas de banco de dados.

• O método de controle de concorrência para acesso a dados, predominante em sistemas distribuídos é Locks.

Page 3: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Conceito de Transação

• Transações podem ser vistas como um grupo de operações combinadas em uma unidade lógica de trabalho.

• São usadas para controlar e manter a consistência e a integridade de cada ação em uma transação, a despeito dos erros que poderão ocorrer no sistema.

Page 4: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Conceito de Transação

• Uma transação define uma sequência de operações que é garantida por um servidor, para ser atômica na presença de múltiplos clientes e na classe de falhas por crash de processos em servidores.

Page 5: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Atomicidade de Transações

• Atomicidade: “uma transação deve ser tudo ou nada”.

• Consistência: “uma transação toma o sistema de um estado consistente para um outro estado consistente”.

• Isolamento: “cada transação deve ser realizada sem interferência de outras transações”.

• Durabilidade: “após uma transação ter sido completada bem sucedida, todos os seus efeitos são salvos em memória permanente.

Page 6: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Indivisibilidade

• Uma transação de cliente é também considerada como indivisível do ponto de vista da transação de outro cliente, no sentido que as operações de uma transação não podem observar os efeitos parciais das operações de uma outra transação.

Page 7: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Transação

• Do ponto de vista do cliente, uma transação é uma sequência de operações que formam um única etapa, transformando os dados de um servidor de um estado consistente para um outro estado consistente.

• O cliente é provido com operações para marcar o início e o fim de uma transação.

Page 8: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

Transaction Life HistoriesFigura 1

Successful Aborted by client Aborted by server

openTransaction openTransaction openTransactionoperation operation operation operation operation operation

server abortstransaction

operation operation operation ERRORreported to client

closeTransaction abortTransaction

Page 9: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Primeiro aspecto para a atomicidade

“Tudo ou nada”

Uma transação ou é completada bem sucedidamente e o efeito de todas as suas operações é registrado nos objetos, ou se ela falha ou é deliberadamente abortada, ela não tem nenhum efeito no todo.

Page 10: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Exemplo 1

• Usamos como exemplo, uma aplicação bancária.

• Cada conta é representada por um objeto remoto, cuja interface Account provê operações para fazer depósito, saques, estabelecer (calcular) saldos e pedir informações sobre esses.

Page 11: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operations of the Account interface

• deposit(amount)– deposit amount in the account

• withdraw(amount)– withdraw amount from the account

• getBalance() -> amount– return the balance of the account

• setBalance(amount)– set the balance of the account to amount

Page 12: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Exemplo de Transações

• Sejam as contas A, B e C.• Sejam duas transações T e U sobre as contas

A, B e C.• Os valores iniciais de balance são:

– A igual a $100, – B igual a $200, – C igual a $300.

Page 13: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operações

• Assuminos que cada das operações deposit, withdraw, getBalance, setBalance, é uma synchronized operação, isto é, os efeitos sobre a variável de instância que registra o balance (saldo) de uma conta é atômico.

Page 14: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Problema no Controle Concorrência

• Um problema bem conhecidos de transações concorrentes no contexto do exemplo do banco:

– “lost update”

• Como este problema pode ser evitado usando-se equivalência serial de execuções de transações ?

Page 15: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

O problema “lost update”

• Sejam as contas A, B e C.• Sejam duas transações T e U sobre as contas

A, B e C.• Os valores iniciais de balance são:

– A igual a $100, – B igual a $200, – C igual a $300.

Page 16: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Transações

• Uma transação é a execução de uma sequência de solicitações (requests) de um cliente sobre operações (withdraw, deposit).

Page 17: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

O problema “lost update”

• A transação T transfere um valor da conta A para a conta B.

• A transação U transfere um valor da conta C para a conta B.

• Em ambos os casos, o valor transferido é calculado para aumentar o saldo (balance) de B em 10%.

Page 18: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Observações na Figura 2

• Daqui para frente, são mostradas as operações que afetam a variável balance (saldo) de uma conta, nas sucessivas linhas das seguintes figuras.

Page 19: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Sem sincronização

• Um servidor que controle transações, não cuidadosamente projetado, suas operações de diferentes clientes podem algumas vezes interferir com outras operações.

• Tais interferências podem resultar em valores incorretos nos objetos.

Page 20: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

The “lost update” problemFigura 2

Transaction T: balance= b.getBalance();b.setBalance(balance*1.1);

a.withdraw(balance/10)

Transaction U:

balance= b.getBalance();b.setBalance(balance*1.1);

c.withdraw(balance/10)

balance=b.getBalance(); $200

balance= b.getBalance() $200

b.setBalance(balance*1.1) $220

b.setBalance(balance*1.1) $220a.withdraw(balance/10) $80

c.withdraw(balance/10) $280

Page 21: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Observações na Figura 2

• E o leitor da figura 2 deve assumir que uma operação, numa linha em particular, é executada num tempo posterior do que a linha acima.

Page 22: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Resultado Correto!

• O efeito sobre a conta B de executar as transações T e U, deve ser para aumentar o balance (saldo) de B em 10%, duas vezes. Assim, o valor final deveria ser $242.

Page 23: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Resultado ObtidoFigura 2

• Os efeitos de permitir as transações T e U executarem concorrentemente como na figura “lost update”, ambas as transações obtém o balance de B como $200 e então deposit $20.

• O resultado é incorreto, aumentando o balance de B em $20 ao invés de $42.

Page 24: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Por que ?? Erro !!!

• O “update” de U é perdido porque T sobrescreve balance de B sem ver o “update” de U.

• Ambas as transações tem de ler o valor inicial de balance de B, antes de qualquer delas escrever o novo valor de balance de B.

Page 25: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

The “lost update” problem

• O problema de “lost update” ocorre quando duas transações T e U lêem o valor velho de uma variável (balance) e então usa ele para calcular o novo valor dessa variável (balance).

Page 26: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

The “lost update” problem

• Isto não pode acontecer, se uma transação é realizada antes da outra, porque a última transação lerá o valor escrito pela última transação.

Page 27: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Resolvendo “lost update”

• Pode-se resolver o problema “lost update” por meio de uma equivalência serial de intercalações de transações T e U.

Page 28: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

Uma intercalação serialmente equivalente de T e U - Figura 3

T Transaction

balance = b.getBalance()b.setBalance(balance*1.1)

a.withdraw(balance/10)

U Transaction

balance = b.getBalance()b.setBalance(balance*1.1)

c.withdraw(balance/10)

balance = b.getBalance() $200

b.setBalance(balance*1.1) $220balance = b.getBalance() $220

b.setBalance(balance*1.1) $242a.withdraw(balance/10) $80

c.withdraw(balance/10) $278

Page 29: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Uma intercalação serialmente equivalente de T e U

• A figura 3 mostra uma intercalação na qual as operações que afetam uma conta compartilhada, B, são realmente seriais.

• Ou seja, a transação T faz todas as suas operações sobre B e conclui, antes da transação U começar a acessar B.

Page 30: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Uma intercalação serialmente equivalente de T e U

• Uma outra intercalação de T e U que tem esta propriedade é uma na qual a transação U completa suas operações sobre a conta B, antes da transação T iniciar.

Page 31: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Equivalência em Série

• Se cada uma das transações tem o efeito correto quando executada sozinha ...

• Então pode-se inferir que se essas transações forem executadas uma por vez, em alguma ordem, o efeito combinado também será correto.

Page 32: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Equivalência em Série

• Uma intercalação das operações das transações em que o efeito combinado é igual ao que seria se as transações tivessem sido executadas uma por vez, em alguma ordem, é uma intercalação equivalente em série.

Page 33: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Equivalência em Série

• A figura 13-14 mostra um exemplo de como a equivalência serial pode ser obtida com certo grau de concorrência.

• As transações T e U acessam a conta B, mas T conclui seu acesso antes que U comece a acessá-la.

Page 34: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks

• Muito utilizado em operações de transações.

• Transações devem ser programadas de modo que seus efeitos sobre dados compartilhados sejam equivalentes em série.

Page 35: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks

• Um servidor pode obter equivalência em série de transações, dispondo em série o acesso aos dados compartilhados.

Page 36: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Transações T and U com Locks - Figura 4

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4

© Addison-Wesley Publishers 2005

Transaction T: balance = b.getBalance()b.setBalance(bal*1.1)

a.withdraw(bal/10)

Transaction U: balance = b.getBalance()b.setBalance(bal*1.1)

c.withdraw(bal/10)

Operations Locks Operations Locks

openTransactionbal = b.getBalance() lock B

b.setBalance(bal*1.1) openTransaction

a.withdraw(bal/10) lock A bal = b.getBalance() waits for T ’s unlock on B

closeTransaction unlock A , B lock B

b.setBalance(bal*1.1)

c.withdraw(bal/10) lock C

closeTransaction unlock B,

C

Page 37: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Equivalência Serial

• Como implementar no computador ???

• Usa-se, para controle de concorrência, o mecanismo de Locks.

Page 38: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks (Travas)

• Um exemplo simples de mecanismo para a disposição das transações em série, é o uso de locks (travas) exclusivos.

• Nesse esquema, um Lock tenta impedir o acesso (travar) a qualquer dado que esteja para ser usado por qualquer operação da transação de um cliente.

Page 39: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks

• Se um cliente solicitar o acesso a um dado que já está travado devido a transação de outro cliente, o pedido será suspenso e o cliente querendo acessar, deverá esperar até que o objeto seja destravado.

• A próxima figura mostra o uso de locks

(travas) exclusivos.

Page 40: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks em Java

import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import java.util.concurrent.locks.Condition;

...

// Criação de um objeto acessLock da classe Lock para// controlar a sincronização de algum objeto// compartilhado.Private Lock acessLock = new ReentrantLock;

Page 41: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks em Java// Condições para controlar a leitura e a escrita.private Condition podeEscrever = acessLock.newCondition();private Condition podeLer = acessLock.newCondition();

...// Escreve valor no objeto compartilhado ...// Para travar o objeto compartilhado, quando o método// set() for chamado ...

public void set( ... ) {

accessLock.lock(); // chama o método lock e bloqueia (trava) o objeto compartilhado. Esse método esperará até que a trava esteja disponível.

...

// Se o objeto estiver sem condição de escrita ...podeEscrever.await(); // Espera uma condição ocorrer

...

Page 42: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks em Java// Sinaliza a thread que está esperando para fazer uma

leitura.

podeLer.signal(); // avisa que uma condição ocorreu ...

...

finally{accessLock.unlock; // destrava o objeto compartilhado.}

} // fim do método set.

Page 43: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks em Java

// Ler valor no objeto compartilhado ...// Para travar o objeto compartilhado, quando o método// get() for chamado.

public void get() {

accessLock.lock() // chama o método lock e bloqueia (trava) o objeto compartilhado. Esse método esperará até que a trava esteja disponível.

...

// Se o objeto estiver sem condição de ser lido...podeLer.await(); // Espera uma condição ocorrer

...

Page 44: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks em Java// Sinaliza a thread que está esperando para fazer uma// leitura.

podeEscrever.signal(); // avisa que uma condição ocorreu

...

finally{accessLock.unlock; // destrava o objeto compartilhado.}

} // fim do método get.

Page 45: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Locks em Java

• Execute os exemplos Deitel 23.11 e 23.12, aproveitando os códigos em 23.6 (interface Buffer), 23.7 (Producer) e 23.8 (Consumer), para o Relacionamento Producer-Consumer com sincronização usando Locks.

Page 46: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método
Page 47: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

The Inconsistent Retrievals Problem

• Um outro exemplo de problema relacionado a uma conta bancária.

• A transação V transfere a soma das contas A e B e a transação W invoca o método agencyTotal para obter a soma dos saldos de todas as contas numa agência do banco.

Page 48: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

The Inconsistent Retrievals Problem

Transaction :V: a.withdraw(100)b.deposit(100)

Transaction W:

aAgency.agencyTotal()

a.withdraw(100); $100total = a.getBalance() $100

total = total+b.getBalance() $300

total = total+c.getBalance()

b.deposit(100) $300

Page 49: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

The Inconsistent Retrievals Problem

• Os saldos (balance) das duas contas A e B são ambos inicialmente $200,00.

• O resultado de agencyTotal inclui a soma de A e B como $300,00, o que é errado.

• Isto ilustra o problema de Inconsistent Retrivals.

Page 50: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

The Inconsistent Retrievals Problem

• Retrivals (recuperações) de W são inconsistentes porque a transação V realizou somente a parte de saque (withdrawal) de uma transferência no tempo em que a soma é calculada.

Page 51: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

A serially equivalent interleaving of V and W

Transaction V:

a.withdraw(100);b.deposit(100)

Transaction W:

aBranch.branchTotal()

a.withdraw(100); $100b.deposit(100) $300

total = a.getBalance() $100total = total+b.getBalance() $400total = total+c.getBalance()...

Page 52: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

A serially equivalent interleaving of V and W

• Considere agora, o efeito de da equivalência serial em relação ao problema “inconsistent retrivals”, no qual a transação V está transferindo a soma da conta A para B, e a transação W está obtendo a soma de todos os saldos.

Page 53: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

A serially equivalent interleaving of V and W

• O “inconsistent retrivals problem” pode ocorrer quando uma transação de recuperação executa concorrentemente com outra transação de “update”.

Page 54: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

A serially equivalent interleaving of V and W

• O problema “inconsistent retrivals” não pode ocorrer se uma transação de “retrieval” (recuperação) é executada antes ou após a transação de “update” (atualização) ocorrer.

Page 55: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Uma intercalação equivalente serialmente de V e W

• Uma intercalação de equivalência serial de uma transação W de recuperação (“retrieval”) e uma transação V de atualização (“update”), impede de ocorrer recuperações inconsistentes.

Page 56: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

Uma intercalação equivalente serialmente de V e W

Transaction V:

a.withdraw(100);b.deposit(100)

Transaction W:

aBranch.branchTotal()

a.withdraw(100); $100b.deposit(100) $300

total = a.getBalance() $100total = total+b.getBalance() $400total = total+c.getBalance()...

Page 57: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Equivalência Serial

• Dizemos que duas transações diferentes têm o mesmo efeito, quando as operações de leitura retornam os mesmos valores, e as variáveis compartilhadas têm, no final, o mesmo valor.

Page 58: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Equivalência Serial

• O uso de equivalência serial como um critério para execução concorrente correta de transações, impede a ocorrência de atualizações perdidas (“lost updates”) e recuperações inconsistentes (“inconsistent retrievals).

Page 59: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operações Conflitantes

• Pares de operações são confitantes, se seus efeitos combinados depende da ordem na qual a operações no par são executados.

• Considerando um par read e write, a operação read acessa o valor de um objeto e write muda seu valor.

Page 60: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operações Conflitantes

• O efeito de um operação refere-se ao valor de um objeto estabelecido por uma operação write e o resultado retornado por uma operação read.

• As regras de conflito para as operações read e write são dadas no slide que segue:

Page 61: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

Read and write operation conflict rules

Operations of differenttransactions

Conflict Reason

read read No Because the effect of a pair of read operations

does not depend on the order in which they are

executed.

read write Yes Because the effect of a read and a write operationdepends on the order of their execution.

write write Yes Because the effect of a pair of write operations

depends on the order of their execution.

Page 62: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operações Conflitantes

• Para quaisquer par de transações T e U, é possível determinar a ordem de pares de operações conflitantes, sobre variáveis acessadas por ambas as transações.

Page 63: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

(10) A non-serially equivalent interleaving of operations of transactions T and U

Transaction T: Transaction U:

x = read(i)write(i, 10)

y = read(j)write(j, 30)

write(j, 20)z = read (i)

Page 64: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operações Conflitantes em T e U

T Ui := 3x := 3i := 10----------------------------------- j := 5 y := 5 j := 30-----------------------------------j := 20----------------------------------- z := 10

T Ui := 3x := 3i := 10j := 20 (*)---------------------------------- y := 20 (*)

j := 30----------------------------------- z := 10

Page 65: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Operações Conflitantes

• Equivalência serial pode ser definida em termos de conflitos de operações como segue:

“Para duas transações serem equivalentes serialmente, é necessário e suficiente que todos os pares de operações conflitantes das duas transações sejam executados na mesma ordem, sobre todos as variáveis que as transações acessam”.

Page 66: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems:

Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

(10) A non-serially equivalent interleaving of operations of transactions T and U

Transaction T: Transaction U:

x = read(i)write(i, 10)

y = read(j)write(j, 30)

write(j, 20)z = read (i)

Page 67: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Intercalação Não-Serialmente Equivalente de operações de Transações T e U

• Considere a figura em (10), com as transações T e U definidas.

• Então considere a intercalação de suas execuções como em (10).

• Note que cada acesso de transação às variáveis i e j é serializado com respeito a um outro.

Page 68: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Intercalação Não-Serialmente Equivalente de operações de Transações T e U

• Porque T faz todos os seus acessos a i antes de U fazer e U faz todos os seus acessos a j antes de T fazer.

• Porém, a ordem não é serialmente equivalente, porque os pares de operações conflitantes não são feitos na mesma ordem em ambos as variáveis compartilhadas i e j.

Page 69: Controle de Concorrência Locks. Mecanismo de sincronização entre threads. Locks são utilizados há muitos anos em sistemas de banco de dados. O método

Ordem Serialmente Equivalente de operações de Transações T e U

• Ordens serialmente equivalentes requerem uma das seguintes condições:

– T acessa i antes de U e T acessa j antes de U.– U acessa i antes de T e U acessa j antes de T.