Win32多线程之最小锁定时间
来源:互联网 发布:安卓虚拟网络 编辑:程序博客网 时间:2024/04/29 16:14
在任何关于同步机制的讨论中,不论是在Win32或Unix或其他操作系统,你一定会一再地听到这样一条规则:
不要长时间锁住一份资源
如果你一直让资源被锁定,你就会阻止其他线程的执行,并把整个程序带到一个完全停止的状态。以critical sectin 来说,当某个线程进入critical section时,该项资源即被锁定。
我们很难定义所谓”长时间“是多少,如果你在网络上进行操作,并且是在一个拨号网络上,长时间可能是指数分钟,如果你所处理的是应用程序的一项关键性资源,长时间可能是指数个毫秒。
我能够给你的最牢靠而立即的警告就是,千万不要在一个critical section中调用Sleep()或任何Wait...() API函数。
当你以一个同步机制保护一份资源时,有一点必须常记在心,那就是:这项资源被使用的频率如何?线程必须多快释放这份资源,才能够确保整个程序的运作很平顺?
某些人会关心这样的问题:如果我再也不释放资源(或不离开critical section,或者不释放mutex......等等),会怎样?答案是:不会怎样!
操作系统不会当掉,用户不会获得任何错误信息,最坏的情况是,当主线程(一个GUI线程)需要使用这被锁定的资源时,程序会挂在那儿,动也不动。
Critical section的一个缺点就是,没有办法获知进入critical section中的那个线程是生是死。从另一个角度看,由于critical section不是核心对象,如果进入critical section的那个线程结束了或者当掉了,而没有调用LeaveCriticalSection()的话,系统没有办法将该critical section清除。如果你需要那样的机能,你应该使用mutex(后面讲介绍mutex)。
- Win32多线程之最小锁定时间
- Win32多线程之我需要锁定数据吗?
- Java 多线程之锁定
- Win32多线程之概述
- Win32多线程之分类
- Win32多线程之进程
- Win32多线程之CreateThread
- Win32多线程之GetExitCodeThread
- Win32多线程之ExitThread
- Win32多线程之WaitForMultipleObjects
- Win32多线程之volatile
- Win32多线程之原子操作
- Win32多线程之核心对象
- Win32多线程之主线程
- Win32多线程之错误处理
- Win32多线程之线程等待
- Win32多线程之性能监视器
- Win32多线程之同步控制
- 带有TimerQueue的EventLoop
- Ajax
- Eclipse开发C/C++ 安装配置图文详解
- 第五个程序opengl光照设置
- Python学习:python扩展库lxml学习
- Win32多线程之最小锁定时间
- 【Pia开发日记】Json&&Post开发Demo
- p2p杂摘
- 微信那点事儿-公众平台开发系列之自定义菜单(php版)
- java枚举的7种用法
- 黑马程序员——正则表达式
- Hive Hbase区别 转载整理
- 按钮的animation移动
- 邻接矩阵图的创建及遍历