关于 windows 互斥锁CRITICAL_SECTION 多次加锁,需要多少释放的问题
来源:互联网 发布:炫彩表白软件 编辑:程序博客网 时间:2024/04/28 09:35
我们程序里,有时某个线程会对锁,连续加两次锁,我以前以为只要释放一次,就会释放该临界区,可不是这样的。应该几次加锁,就应该几次释放锁。
CRITICAL_SECTION mylock;
DWORD WINAPI ThreadFunc3(LPVOID lpParameter)
{
EnterCriticalSection(&mylock);
cout << "线程3 第一次加锁成功" << endl;
EnterCriticalSection(&mylock);
cout << "线程3 第二次加锁成功" << endl;
{
EnterCriticalSection(&mylock);
cout << "线程3 第二次加锁成功" << endl;
LeaveCriticalSection(&mylock);
cout << "线程3 第二次解锁成功" << endl;
}
LeaveCriticalSection(&mylock);
cout << "线程3 第一次解锁成功" << endl;
return 0;
}
DWORD WINAPI ThreadFunc4(LPVOID lpParameter)
{
Sleep(1000);
EnterCriticalSection(&mylock);
cout << "线程4 加锁成功" << endl;
LeaveCriticalSection(&mylock);
return 0;
}
在线程3中我们连接两次加了锁,如果我们只释放一次,线程4永远也加不起锁;
只有线程3加了两次锁,也释放了两次,线程4才可加起锁。
故,应该有几次加锁,就应该有几次释放锁。
我想原因可能是这样的,锁里面应该有一个引用计数在里面,在A线程中,对某一锁加锁一次,引用计数加1,对锁解锁一次,引用计数减1,当为0时,才会释放该临界区,线程B才可加上该互斥锁。
- 关于 windows 互斥锁CRITICAL_SECTION 多次加锁,需要多少释放的问题
- 关于CRITICAL_SECTION的问题
- 关于CRITICAL_SECTION、CCriticalSection和信号量的问题
- 关于CRITICAL_SECTION、CCriticalSection和信号量的问题
- 关于需要释放的调用
- 关于CRITICAL_SECTION的一些理解
- 对于多线程访问同一变量是否需要加锁的问题
- 关于时间的问题,多少多少年前
- 关于内存释放的问题
- 关于dealloc释放的问题
- 关于vector的释放问题
- 关于多线程与CRITICAL_SECTION的使用
- 关于多次循环的性能问题
- 关于UILongPressGestureRecognizer调用多次的问题
- 关于fragment多次调用onCreateView的问题
- 关于UILongPressGestureRecognizer调用多次的问题
- CRITICAL_SECTION结构与共享资源绑定的问题
- 关于ORACLE的隔离级别和加锁问题
- [杭州] 前端开发攻城师-招聘
- 构建和实现单点登录解决方案
- Linq to sql:
- SilverLight概述
- [leetcode] Sqrt(x)
- 关于 windows 互斥锁CRITICAL_SECTION 多次加锁,需要多少释放的问题
- HDU1004——Let the Balloon Rise
- Asterisk 未来之路3.0_0006
- 如何使用飞秋FeiQ实现两电脑通信(或传输文件)
- Linq to sql:使用存储过程新增数据
- OnClose()和OnDestroy()
- 手机科普贴 告诉你RAM和ROM的真正区别
- poj 2631(dfs求最长路径)
- SQL Server 中 触发器用法