Windows 平台之读写锁
来源:互联网 发布:ansys软件安装 编辑:程序博客网 时间:2024/05/16 19:37
//windows平台下使用临界段实现的读写锁功能,代码短小简洁。导出函数名使用POSIX函数名
///By Fanxiushu 2012
#pragma once
#ifdef WIN32
#include <stdio.h>
#include <assert.h>
#include <windows.h>
/////读写锁
struct rwlock
{
private:
CRITICAL_SECTION write_lock;
CRITICAL_SECTION read_lock;
volatile LONG reader_count;
volatile bool is_enter_writer;
public:
rwlock(){
reader_count = 0;
is_enter_writer = false;
::InitializeCriticalSection( &write_lock);
::InitializeCriticalSection(&read_lock);
}
~rwlock(){
::DeleteCriticalSection(&write_lock);
::DeleteCriticalSection(&read_lock);
}
public:
int rdlock(){
EnterCriticalSection( &write_lock );
if( ::InterlockedIncrement( &reader_count ) == 1 ){
EnterCriticalSection( &read_lock );
}
LeaveCriticalSection( &write_lock );
return 0;
}
int wrlock(){
EnterCriticalSection( &write_lock );
EnterCriticalSection( &read_lock);
is_enter_writer = true;
return 0;
}
void _unlock() {
if( is_enter_writer ){
is_enter_writer = false;
LeaveCriticalSection( &read_lock );
LeaveCriticalSection( &write_lock );
}
else{
if( ::InterlockedDecrement( &reader_count) == 0 ){
LeaveCriticalSection( &read_lock );
}
}
}
///////////
};
typedef rwlock pthread_rwlock_t;
#define pthread_rwlock_init( l )
#define pthread_rwlock_destroy(l)
#define pthread_rwlock_rdlock( l ) ((rwlock*)(l))->rdlock()
#define pthread_rwlock_wrlock( l ) ((rwlock*)(l))->wrlock()
#define pthread_rwlock_unlock( l ) ((rwlock*)(l))->_unlock()
#else
#include <unistd.h>
#include <pthread.h>
#endif
///By Fanxiushu 2012
#pragma once
#ifdef WIN32
#include <stdio.h>
#include <assert.h>
#include <windows.h>
/////读写锁
struct rwlock
{
private:
CRITICAL_SECTION write_lock;
CRITICAL_SECTION read_lock;
volatile LONG reader_count;
volatile bool is_enter_writer;
public:
rwlock(){
reader_count = 0;
is_enter_writer = false;
::InitializeCriticalSection( &write_lock);
::InitializeCriticalSection(&read_lock);
}
~rwlock(){
::DeleteCriticalSection(&write_lock);
::DeleteCriticalSection(&read_lock);
}
public:
int rdlock(){
EnterCriticalSection( &write_lock );
if( ::InterlockedIncrement( &reader_count ) == 1 ){
EnterCriticalSection( &read_lock );
}
LeaveCriticalSection( &write_lock );
return 0;
}
int wrlock(){
EnterCriticalSection( &write_lock );
EnterCriticalSection( &read_lock);
is_enter_writer = true;
return 0;
}
void _unlock() {
if( is_enter_writer ){
is_enter_writer = false;
LeaveCriticalSection( &read_lock );
LeaveCriticalSection( &write_lock );
}
else{
if( ::InterlockedDecrement( &reader_count) == 0 ){
LeaveCriticalSection( &read_lock );
}
}
}
///////////
};
typedef rwlock pthread_rwlock_t;
#define pthread_rwlock_init( l )
#define pthread_rwlock_destroy(l)
#define pthread_rwlock_rdlock( l ) ((rwlock*)(l))->rdlock()
#define pthread_rwlock_wrlock( l ) ((rwlock*)(l))->wrlock()
#define pthread_rwlock_unlock( l ) ((rwlock*)(l))->_unlock()
#else
#include <unistd.h>
#include <pthread.h>
#endif
- Windows 平台之读写锁
- Windows平台下的读写锁
- 一个简单的读写锁的实现(WINDOWS平台)
- 一个简单的读写锁(Windows 平台)
- 跨平台(windows和unix系列)读写锁
- linux平台使用读写锁
- Unity3D开发之各平台读写文件
- WINDOWS下读写锁
- WINDOWS下读写锁
- windows读写锁实现
- windows读写锁
- Windows线程同步之Slim读写锁(SRWLock)
- Windows线程同步之Slim读写锁(SRWLock)
- 不同WINDOWS平台下磁盘逻辑扇区的直接读写
- 不同WINDOWS平台下磁盘逻辑扇区的直接读写
- 不同WINDOWS平台下磁盘逻辑扇区的直接读写
- python跨平台读写文件(Windows linux)
- Windows进程通信之进程内存读写
- 任正非在2012实验室的讲话
- binutils 介绍
- wxWidgets开发工具-Code::Blocks的安装
- Linux下GDB调试
- SSH整合 简单的增删改查
- Windows 平台之读写锁
- MACHINE_START
- linux那点事儿(上)
- 要,囫囵吞枣; 不要, 咬一口丢下
- memcache高并发
- NAT(Network Address Translate)原理
- Win7上Git安装及简单配置过程
- NYOJ-458:小光棍数
- 高级字符驱动程序操作——ioctl