slim读/写锁 srwlock
来源:互联网 发布:小猪cms源码 编辑:程序博客网 时间:2024/06/05 18:56
****************************************************
2010-02-03 <<Slim 读/写锁>> <<SRWPro>>
SRWLock: 区分读取者线程和写入者线程
让读取者线程在同一时刻访问共享资源, 写入者线程独占对资源的访问权
*********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <process.h>
DWORD g_num;
SRWLOCK srw_lock;
UINT uTid[10];
UINT uTid2[10];
/*
* 因为独占了共享资源,
* 所以当一个读取者线程结束时
* 其他线程才能享有共享资源
*
* 当有一个线程占有共享资源时,
* 其他线程最少要过一分钟才能
* 读取资源
*/
UINT WINAPI ExclusiveThread(LPVOID pvParam)
{
//写入资源,所以采用独占模式
AcquireSRWLockExclusive(&srw_lock);
for (int i=0;i<=100;i++)
{
g_num = g_num + i;
}
printf("write: %d /n",pvParam);
Sleep(1000);
ReleaseSRWLockExclusive(&srw_lock);
return 0;
}
/*
* 读取线程, 几个线程可以共同读取
*/
UINT WINAPI SharedThread(LPVOID pvParam)
{
//读取资源,共享模式
AcquireSRWLockShared(&srw_lock);
printf("g_num is %d == %d/n",g_num,pvParam );
Sleep(1000);
ReleaseSRWLockShared(&srw_lock);
return 0;
}
int main(int argc, TCHAR* argv[], TCHAR* envp[])
{
g_num = 0;
//初始化一个锁,与CS不同,用完之后不用删除,因为系统会帮助我们做这些事情。
InitializeSRWLock(&srw_lock);
//开启10线程,每个线程执行g_num累加,在开启一个读取即时的g_num数值
HANDLE h[10],hh[10];
for (int i=0,j=0;i<10;i++,j++)
{
h[i] = (HANDLE)::_beginthreadex(NULL,0,ExclusiveThread,&uTid[i],0,&uTid[i]); // 写入者线程
hh[j] =(HANDLE)::_beginthreadex(NULL,0,SharedThread,&uTid2[i],0,&uTid2[i]); // 读取者线程
}
/*
* 等到两个线程都结束为止
*/
WaitForMultipleObjects(10,h,TRUE,INFINITE);
WaitForMultipleObjects(10,hh,TRUE,INFINITE);
printf("finally,g_num is %d /n",g_num);
system("pause"); // 为了阻止DOS立即关闭
return 0;
}
- slim读/写锁 srwlock
- Slim读/写锁(SRWLock)及同步方式比较
- Slim读/写锁
- 多线程 -- Slim 读/写锁
- Windows线程同步之Slim读写锁(SRWLock)
- Windows线程同步之Slim读写锁(SRWLock)
- 线程同步之Slim读/写锁
- 线程同步 Slim读写锁 SRWLOCK 用户模式同步对象 InitializeSRWLock
- 写优先读写锁,读效率比 WINDOWS 的 SRWLOCK 慢一倍左右,百万级读锁要156ms
- 多线程13: 读者写者问题继 读写锁SRWLock
- 读写锁SRWLock
- 读写锁SRWLock
- SRWLock
- 用户模式下的线程同步——Slim读/写锁
- 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
- 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
- 秒杀多线程第十一篇 读者写者问题续 读写锁SRWLock
- 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
- php 导出word 文档
- 快速查看Linux系统软硬件配置bash
- 设计模式-结构型模式-代理
- IT 生涯的辛酸
- 浅谈流媒体技术在无线网络中的应用
- slim读/写锁 srwlock
- 将excel中的数据导入Sqlite3
- Eclipse 快捷键大全
- VC6安装错误——Error Launching acmboot.exe
- Android的IPC机制Binder的各个部分
- 我的生活
- Oracle笔记 四、增删改、事务
- ASP.NET 控件
- Asp.net中防止用户多次登录的方法