【Dokan学习记录】2015-01-28
来源:互联网 发布:安卓卡iphone7在线软件 编辑:程序博客网 时间:2024/06/06 18:50
dokan.h
CRITICAL_SECTION CriticalSection;
临界区:就是访问临界资源的那段代码.
是一个访问共用资源的程序片段,而这些共用资源有无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待.
typedefstruct_RTL_CRITICAL_SECTION{
PRTL_CRITICAL_SECTION_DEBUGDebugInfo;
LONGLockCount;
LONGRecursionCount;
HANDLEOwningThread; // from the thread'sClientId->UniqueThread
HANDLELockSemaphore;
ULONG_PTRSpinCount; // force size on 64-bit systems whenpacked
}RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
LockCount 临界区中最重要的一个字段.它被初始化为数值 -1;此数值等于或大于 0时,表示此临界区被占用。当其不等于-1时,OwningThread字段包含了拥有此临界区的线程ID.此字段与 (RecursionCount -1) 数值之间的差值表示有多少个其他线程在等待获得该临界区.(有人说, OwningThread应该是DWORD类型而不是.)
RecursionCount此字段包含所有者线程已经获得该临界区的次数.(如果该数值为零,下一个尝试获取该临界区的线程将会成功.)
OwningThread 此字段包含当前占用此临界区的线程的线程标识符.(与GetCurrentThreadId 所返回的 ID 相同.)
LockSemaphore 一个内核对象句柄,用于通知操作系统:该临界区现在空闲.
win32的API中,对于临界区的操作:
VOIDInitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);//初始化一个临界资源对象, lpCriticalSection临界资源对象指针.
WINBASEAPIVOIDWINAPIEnterCriticalSection(__inoutLPCRITICAL_SECTION lpCriticalSection);//进入临界区,__inout双向口
WINBASEAPIVOIDWINAPI LeaveCriticalSection();(__inoutLPCRITICAL_SECTION lpCriticalSection);//标记临界区结束
WINBASEAPIVOIDWINAPILeaveCriticalSection();(__inoutLPCRITICAL_SECTION lpCriticalSection);//标记临界区结束
PS: mutex(互斥量)与semaphore(信号量)
Mutex是一把凭证货是钥匙,一个线程拿了就可进入,出来的时候把钥匙交给下一个人。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。
Semaphore是可以容纳n个线程的房间,如果总数不满就可以进去,如果满了,就要等待有人出来。用于限制对于某一资源的同时访问。
- 【Dokan学习记录】2015-01-28
- 【Dokan学习记录】2015-01-26
- 【Dokan学习记录】2015-01-27
- 【Dokan学习记录】2015-01-29
- 【Dokan学习记录】2015-01-30
- Dokan(Windows FUSE)学习笔记
- 【Python学习记录】2015-01-28
- Dokan 入门 基础
- dokan 开发实战
- dokan入门编译指南
- CEPH-DOKAN编译使用
- Dokan虚拟磁盘开发实战
- 【Python学习记录】2015-01-27
- 【Python学习记录】2015-01-29
- 3-28学习记录
- 2015 九月份学习记录
- 汇编学习记录01
- webService学习记录-01
- unit 3:fcntl函数
- java.util.concurrent包介绍(2)——Java线程安全
- php ckeditor 添加上传功能
- 米米爱健康
- caffe在make过程中出现[.build_release/tools/extract_features.bin] Error 1或者与libreadline.so.6相关错误解决方法
- 【Dokan学习记录】2015-01-28
- Android学习day03
- ramdisk根文件系统+initramfs
- Flash的层叠顺序问题(z-index)
- LeetCode-Intersection of Two Linked Lists
- cf_288 C
- Java 高效复制文件方法
- 去除ckeditor上传图片打开窗口里面的上传高级和链接tab
- android 进度条 自定义菊花