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

Número de Mensagens : 84
Data de inscrição : 06/10/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

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