Ir ao conteúdo
  • Cadastre-se

ReaderWriterLock, onde está o erro?


Diego Braga Guedes

Posts recomendados

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;};

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.

ninguém? =x

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!