码迷,mamicode.com
首页 > Windows程序 > 详细

Windows Vista新增的读写锁函数

时间:2015-04-02 15:19:26      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

Windows Vista及更新的Windows客户端系统,Windows Server 2008及更新的Windows服务器系统,新增了读写锁API函数,我们不用再手动编写读写锁了。


要使用读写锁,当然要包含Windows头文件,并定义一个SRWLOCK(结构体)类型的变量:

SRWLOCK Lock;

SRWLOCK类型的变量,不能手动赋值,不能取其中字段的值,也不能用memcpy等函数拷贝它所占的内存,对它的所有操作(初始化、读锁、写锁等等)只能通过相关的函数来进行。


初始化读写锁的函数是InitializeSRWLock,用法是:

InitializeSRWLock(&Lock);

参数类型为SRWLOCK*,把刚才定义的Lock的地址传递过去就可以了。

为读操作上锁的函数是AcquireSRWLockShared:

AcquireSRWLockShared(&Lock;

为读操作解锁的函数是ReleaseSRWLockShared:

ReleaseSRWLockShared(&Lock)

为写操作上锁的函数是AcquireSRWLockExclusive:

AcquireSRWLockExclusive(&Lock);

为写操作上锁的函数是ReleaseSRWLockExclusive:

ReleaseSRWLockExclusive(&Lock);

读写锁不需要手动删除。


为了方便,我一般会把读写锁及其相关的函数封装成一个类,从而达到“开箱即用”的效果。

// 头文件 srw.h
// 需要:
//#include <windows.h>

class RWMutex
{
public:
    RWMutex();
    ~RWMutex() = default;
    void RLock();
    void RUnlock();
    void Lock();
    void Unlock();

private:
    SRWLOCK Lock_;
private:
    RWMutex(const RWMutex&) = delete;
    void operator=(const RWMutex&) = delete;
};

重载赋值符号,返回void而不是RWMutex&,这其实更加合理。

// 源文件 srw.cpp

RWMutex::RWMutex()
{
    ::InitializeSRWLock(&Lock_);
}

void RWMutex::RLock()
{
    ::AcquireSRWLockShared(&Lock_);
}

void RWMutex::RUnlock()
{
    ::ReleaseSRWLockShared(&Lock_);
}

void RWMutex::Lock()
{
    ::AcquireSRWLockExclusive(&Lock_);
}

void RWMutex::Unlock()
{
    ::ReleaseSRWLockExclusive(&Lock_);
}

Windows Vista新增的读写锁函数

标签:

原文地址:http://my.oschina.net/jthmath/blog/395127

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!