Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouJúlia de Barros Peres Alterado mais de 9 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.