Conectar-se

Esqueci minha senha

Últimos assuntos
» colisão de queda após outra colisão dando problema
Hoje à(s) 18:08 por Lighter

» [Duvida] O que aprender
Hoje à(s) 15:32 por Markituh

» BUILD FAILED: Cannot find BUILD.xml
Hoje à(s) 14:50 por ReisBlender

» Nota de esclarecimento - GMBR voltou!
Sex 23 Jun 2017, 20:33 por Willy

» Regras do Fórum
Sex 23 Jun 2017, 19:02 por GMBR

» Retorno da GMBR!!!
Ter 24 Jan 2017, 15:43 por GMBR

» Jogo Dengue HTML
Seg 30 Nov 2015, 16:17 por guga

» Criando IA Simples para inimigos
Qua 25 Nov 2015, 19:22 por DJDAVYD

» Ordenar variavel em ordem decrescente
Sex 28 Ago 2015, 21:09 por Kodained

» Crio Trilha Sonora para Games!
Qui 27 Ago 2015, 13:50 por Isaias Malafaia

» Problema com Colisão
Qui 27 Ago 2015, 12:30 por The_Game

» Quem quer Uma Engine, e de Quê?
Qui 27 Ago 2015, 09:22 por theguitarmester

» [RESOLV]Como adicionar 2 objetos na mesma posição?
Qua 26 Ago 2015, 11:38 por Bhryenno Kelvyn Carlson

» Sistema de porta!!!
Ter 25 Ago 2015, 21:29 por theguitarmester

» Venda de objetos em Inventário - Multiplicado
Seg 24 Ago 2015, 18:33 por AG Hydra

» Atirar na direção certa
Seg 24 Ago 2015, 09:03 por theguitarmester

» Western Duels
Seg 24 Ago 2015, 07:47 por theguitarmester

» Problemas na compilação android
Dom 23 Ago 2015, 23:43 por Zero.

» Dúvida sobre strings, lendo txt
Sab 22 Ago 2015, 20:31 por Pai véi

» Como estabilizar um som
Sab 22 Ago 2015, 19:03 por Isquilo_Roedor

» Janela Modal
Sab 22 Ago 2015, 09:23 por Pai véi

» Sobre instance Creation Code
Sab 22 Ago 2015, 08:39 por Pai véi

» LudumDare #33
Sex 21 Ago 2015, 21:17 por WellingtonBecker

» Como fazer um temporizador
Sex 21 Ago 2015, 19:02 por Isquilo_Roedor

» GMS sempre salva projeto ao compilar?
Sex 21 Ago 2015, 12:32 por Pai véi

Quem está conectado
23 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 22 Visitantes

Fubukki

[ Ver toda a lista ]


O recorde de usuários online foi de 324 em Ter 05 Out 2010, 13:36

C++ ReaderWriterLock, onde está o erro?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

C++ ReaderWriterLock, onde está o erro?

Mensagem por diego333 em Qua 12 Mar 2014, 17:34

oi, estou tentando criar um readerwriterlock usando apenas as funções do Windows, porém parece que o "writeLock" só pode ser chamado uma vez (não por vez, mas pela vida do objeto) e não consigo achar o erro.

Código:

struct ReaderWriterLock {
   volatile long readerCount = 0;

   ReaderWriterLock():
      readerLock(CreateEvent(NULL, FALSE, TRUE, NULL)){
      InitializeCriticalSection(&writerLock);
   }

   void readLock(){
      EnterCriticalSection(&writerLock);

      if (InterlockedIncrement(&readerCount) == 1){
         ResetEvent(&readerLock);
      }

      LeaveCriticalSection(&writerLock);
   }

   void readUnlock(){
      EnterCriticalSection(&writerLock);

      if (InterlockedDecrement(&readerCount) == 0)
         SetEvent(&readerLock);

      LeaveCriticalSection(&writerLock);
   }

   // somente chamar writeUnlock depois, não usar readUnlock
   void upgradeLock(){
      if (InterlockedDecrement(&readerCount) == 0)
         EnterCriticalSection(&writerLock);
      else
         writeLock();
   }

   void writeLock(){
      WaitForSingleObject(readerLock, INFINITE);
      EnterCriticalSection(&writerLock);
   }

   void writeUnlock(){
      SetEvent(&readerLock);
      LeaveCriticalSection(&writerLock);
   }

   ~ReaderWriterLock(){
      CloseHandle(readerLock);
      DeleteCriticalSection(&writerLock);
   }


private:
   CRITICAL_SECTION writerLock;
   HANDLE           readerLock;
};


diego333

Data de inscrição : 06/10/2010
Número de Mensagens : 84
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum