lesson4
来源:互联网 发布:july算法视频 百度盘 编辑:程序博客网 时间:2024/06/09 19:42
window下的四大锁
(1)临界区
临界区是最简单的一种锁。基本的临界区操作有:
- InitializeCriticalSection
- EnterCriticalSection
- LeaveCriticalSection
- DeleteCriticalSection
使用时候 主要是保护 EnterCriticalSection 和LeaveCritiSection 之间的代码。
(2) 信号量
信号量是使用的最多的一种锁结果,也是最方便的一种锁。围绕着信号量,人们提出了很多数据互斥访问的方案,pv操作就是其中的一种。如果说互斥锁只能对单个资源进行保护,那么信号量可以对多个资源进行保护。同时信号量在解锁的时候,可以被另外一个thread进行解锁操作。目前,常用的信号量操作有:
1.CreateSemaphore
2.OpenSemaphore
3.ReleaseSemaphore
使用:
- WaitForSingleObject(/*...*/);
- do_something();
- ReleaseSemaphore(/*...*/);
注意:信号量在初始化的时候需要明确当前资源的数量和信号量的初始状态是什么。
(3)互斥锁
它可以被不同进程使用,因为它有名字。同时,获取锁和释放锁的线程必须是同一个线程。(不是很理解)
、常用的互斥锁操作有
CreateMutex
OpenMutex
ReleaseMutex
使用:
WaitForSingleObject(/*...*/);
do_something();
ReleaseMutex(/*...*/);
event 对象
event对象是windows下面很有趣的一种锁结果。从某种意义上说,它和互斥锁很相近,但是又不一样。因为在thread获得锁的使用权之前,常常需要main线程调用SetEvent设置一把才可以。关键是,在thread结束之前,我们也不清楚当前thread获得event之后执行到哪了。所以使用起来,要特别小心。
常用的event操作有:
- CreateEvent
- OpenEvent
- PulseEvent
- ResetEvent
- SetEvent
我们对event的使用习惯于分成main thread和normal thread使用。main thread负责event的设置和操作,而normal thread负责event的等待操作。在CreateEvent的时候,要务必考虑清楚event的初始状态和基本属性。
对于main thread,应该这么做,
- CreateEvent(/*...*/);
- SetEvent(/*...*/);
- WaitForMultiObjects(hThread, /*...*/);
- CloseHandle(/*...*/);
对于normal thread来说,操作比较简单,
- while(1){
- WaitForSingleObject(/*...*/);
- /*...*/
- }
- lesson4
- lesson4
- lesson4
- LogicJava---Lesson4
- csdnS2-lesson4
- 黑马程序猿-lesson4
- VC++笔记(Lesson1-Lesson4)
- Lesson4: 简单绘图
- csdnS2-lesson4详细
- jsp lesson4 part1
- jsp lesson4 part2
- jsp lesson4 part3
- Lesson4: 简单绘图
- Lesson4: 文本编程
- C语言Lesson4
- 阿甘学java视频--lesson4
- 【西西学FPGA】Lesson4
- 孙鑫 Lesson4 draw
- 面试应该注意的地方
- Struts2获得session和request
- UML类图设计
- java项目如何打成jar包
- C++类和接口的设计原则探讨
- lesson4
- 在VC中使用自定义资源,FindResource,LoadResource,LockResource
- POJ——1276(动态规划,硬币问题)
- this和window.event.srcElement大致相同
- Hibernate的事务提交
- poj 2653 Pick-up sticks(线段相交)
- 关于C++虚继承、虚函数继承的几个例子
- [热身题][hdoj_2042]不容易系列之二
- Excel中两列内容合并