 92c59963f8
			
		
	
	
		92c59963f8
		
	
	
	
	
		
			
			git-svn-id: http://mc-server.googlecode.com/svn/trunk@606 0a769ca7-a7f5-676a-18bf-c427514a06d6
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| #pragma once
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| class cCriticalSection
 | |
| {
 | |
| public:
 | |
| 	cCriticalSection(void);
 | |
| 	~cCriticalSection();
 | |
| 
 | |
| 	void Lock(void);
 | |
| 	void Unlock(void);
 | |
| 	
 | |
| private:
 | |
| 
 | |
| 	#ifdef _WIN32
 | |
| 		CRITICAL_SECTION m_CriticalSection;
 | |
| 	#else  // _WIN32
 | |
| 		void* m_CriticalSectionPtr ALIGN_8; // Pointer to a CRITICAL_SECTION object
 | |
| 		void* m_Attributes ALIGN_8;
 | |
| 	#endif  // else _WIN32
 | |
| } ALIGN_8;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /// RAII for cCriticalSection - locks the CS on creation, unlocks on destruction
 | |
| class cCSLock
 | |
| {
 | |
| 	cCriticalSection * m_CS;
 | |
| 
 | |
| 	// Unlike a cCriticalSection, this object should be used from a single thread, therefore access to m_IsLocked is not threadsafe
 | |
| 	// In Windows, it is an error to call cCriticalSection::Unlock() multiple times if the lock is not held, 
 | |
| 	// therefore we need to check this value whether we are locked or not.
 | |
| 	bool m_IsLocked;
 | |
| 	
 | |
| public:
 | |
| 	cCSLock(cCriticalSection * a_CS);
 | |
| 	cCSLock(cCriticalSection & a_CS);
 | |
| 	~cCSLock();
 | |
| 	
 | |
| 	// Temporarily unlock or re-lock:
 | |
| 	void Lock(void);
 | |
| 	void Unlock(void);
 | |
| 
 | |
| private:
 | |
| 	DISALLOW_COPY_AND_ASSIGN(cCSLock);
 | |
| } ;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /// Temporary RAII unlock for a cCSLock. Useful for unlock-wait-relock scenarios
 | |
| class cCSUnlock
 | |
| {
 | |
| 	cCSLock & m_Lock;
 | |
| public:
 | |
| 	cCSUnlock(cCSLock & a_Lock);
 | |
| 	~cCSUnlock();
 | |
| 	
 | |
| private:
 | |
| 	DISALLOW_COPY_AND_ASSIGN(cCSUnlock);
 | |
| } ;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |