采用 RWLock结构实现多线程链表的插入,删除以及搜索
//线程类,摘抄Windows 多线程编程的第七章内容
#pragma once
#include <Windows.h>
#include "stdio.h"
typedef struct _RWLock
{
HANDLE hMutex;
HANDLE hDataLock;
int ReadCount;
}RWLock;
class CThreadLock
{
public:
CThreadLock(void);
~CThreadLock(void);
BOOL InitRWLock();
BOOL ReadOK();
BOOL WriteOK();
BOOL AcquireReadLock();
BOOL ReleaseReadLock();
BOOL AcquireWriteLock();
BOOL ReleaseWriteLock();
BOOL MyWaitForSingleObject(HANDLE hObject);
void Clear();
private:
RWLock *m_pRWLock;
};
#include "ThreadLock.h"
CThreadLock::CThreadLock(void)
{
m_pRWLock = new RWLock;
}
CThreadLock::~CThreadLock(void)
{
if (m_pRWLock != NULL)
{
Clear();
delete m_pRWLock;
}
}
BOOL CThreadLock::InitRWLock()
{
if (m_pRWLock == NULL)return FALSE;
m_pRWLock->ReadCount = 0;
m_pRWLock->hMutex = CreateMutex(NULL,FALSE,NULL);
if (m_pRWLock->hMutex == NULL)
{
return FALSE;
}
m_pRWLock->hDataLock = CreateSemaphore(NULL,1,1,NULL);
if (m_pRWLock->hDataLock == NULL)
{
CloseHandle(m_pRWLock->hMutex);
return FALSE;
}
return TRUE;
}
BOOL CThreadLock::MyWaitForSingleObject(HANDLE hObject)
{
int result;
result = WaitForSingleObject(hObject,MAXIMUM_ALLOWED);
if (result != WAIT_OBJECT_0)
{
//AfxMessageBox(_T("MyWaitForSingleObject - Wait failed, you probably forgot to call release!"));
printf("MyWaitFo