A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Design Pattern Double Checked Locking. 2 Design Pattern Apresenta soluções para problemas que ocorrem repetidamente em nosso ambiente computacional.

Apresentações semelhantes


Apresentação em tema: "1 Design Pattern Double Checked Locking. 2 Design Pattern Apresenta soluções para problemas que ocorrem repetidamente em nosso ambiente computacional."— Transcrição da apresentação:

1 1 Design Pattern Double Checked Locking

2 2 Design Pattern Apresenta soluções para problemas que ocorrem repetidamente em nosso ambiente computacional

3 3 Design Pattern Muitas soluções conhecidas funcionam bem para programas seqüenciais, mas contêm certas considerações que não se aplicam no contexto da concorrência.

4 4 Objetivo Conhecer um dos mecanismos de controle de concorrência

5 5 Padrão de Singleton Assegura que uma classe possua uma única instância e provê um ponto de acesso global a esta instância. –Ex: Spooler de impressão, Gerenciador de Janelas Não funciona corretamente para sistemas multitarefa ou paralelos

6 6 Condição de Corrida Múltiplos threads disputam a inicialização de uma seção crítica. –Seção crítica: enquanto um thread está sendo executado em uma seção crítica, nenhum outro thread poderá executar esta seção.

7 7 Padrão de Singleton Class Singleton { public; static Singleton_*instance { if (instance = = 0) //critical section instance_= new Singleton; return instance_; } void method (void); //outros métodos e membros omitidos private: static Singleton *instance_; };

8 8Mutex Class Singleton { Public: static Singleton_*instance { // Construtor do guard requisita // lock_automaticamente Guard guard (lock); // Apenas um thread na seção crítica por vez. if (instance = = 0) //critical section instance_= new Singleton; return instance_; // guard libera lock_automaticamente } private: static Mutex lock_; static Singleton *instance_; };

9 9 Possível solução static Singleton_*instance { if (instance = = 0) { Guard guard (lock_); // apenas chega a este ponto se a instance_ // ainda não inicializada instance_= new Singleton; } return instance_; }

10 10 Double-Checked Locking static Singleton_*instance { // Primeira verificação if (instance = = 0) { //Assegura (construtor requisita lock_) Guard guard (lock_); // Dupla verificação_ if (instance = = 0) instance_= new Singleton; return instance_; //guard libera lock_ } Private: static Mutex lock_; static Singleton *instance_; };

11 11 Aplicação A seção crítica é executada apenas uma vez A aplicação possui uma ou mais seções críticas de código que devem ser executados seqüencialmente Threads múltiplos podem tentar executar uma seção crítica simultaneamente

12 12 Estrutura if (Flag = = False) { Mutex.acquire (); if (Flag = = False) { critical section; Flag = True; } Mutex.release (); } if (Flag = = False) { Mutex.acquire (); if (Flag = = False) { critical section; Flag = True; } Mutex.release (); }

13 13 AplicaçãoFlag Mutex Seção Crítica acquire Check false Check false perform set release Verificar Flag Acquire Mutex Verificar Flag Critical Section Altera Flag Release Mutex


Carregar ppt "1 Design Pattern Double Checked Locking. 2 Design Pattern Apresenta soluções para problemas que ocorrem repetidamente em nosso ambiente computacional."

Apresentações semelhantes


Anúncios Google