Windows 多线程编程链表的读写

采用 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值