加锁的原因 结构体内部增加锁
2015-10-16 10:11
239 查看
比如,链表的inset函数,需要加锁。
那么,就应该在ListNode类的内部增加成员变量,用于锁定。
要给链表的insert()方法,加锁的原因:
比如某个List实例,list_1,该变量在主线程和子线程中,被共享了。即主线程也调用list_1的Insert()方法,子线程也调用。
这样就必须要加锁才行。
请注意,我把CRITICAL_SECTION
变量放在
List
结构之中。你也可以使用一个全局变量取代之,但我是希望每一个链表实体都能够独立地读写。如果只使用一个全局性critical
section
,就表示一次只能读写一个链表,这会产生效率上的严重问题。
京麦中,子线程类QDownLoadThread中的成员变量bool
m_bStop。对该变量的访问,会进行加锁。
原因:
在主线程中,会调用QDownLoadThread实例的setValue()方法,修改该实例的成员变量m_bStop。
同时,QDownLoadThread实例的run()函数中,也会调用该变量。
这样,在某个时刻,就会出现,主线程和子线程同时使用该变量的情况,所以,对该变量的访问要加锁。
那么,就应该在ListNode类的内部增加成员变量,用于锁定。
要给链表的insert()方法,加锁的原因:
比如某个List实例,list_1,该变量在主线程和子线程中,被共享了。即主线程也调用list_1的Insert()方法,子线程也调用。
这样就必须要加锁才行。
请注意,我把CRITICAL_SECTION
变量放在
List
结构之中。你也可以使用一个全局变量取代之,但我是希望每一个链表实体都能够独立地读写。如果只使用一个全局性critical
section
,就表示一次只能读写一个链表,这会产生效率上的严重问题。
京麦中,子线程类QDownLoadThread中的成员变量bool
m_bStop。对该变量的访问,会进行加锁。
原因:
在主线程中,会调用QDownLoadThread实例的setValue()方法,修改该实例的成员变量m_bStop。
同时,QDownLoadThread实例的run()函数中,也会调用该变量。
这样,在某个时刻,就会出现,主线程和子线程同时使用该变量的情况,所以,对该变量的访问要加锁。
相关文章推荐
- Eclipse中集成Tomcat
- Java用itext操作PDF
- MyEclipse在Java文件中设置作者、日期
- 查询某条记录在数据库中是 第几行
- Linux 命令 - find: 搜索文件
- iOS开发-- 使用TestFlight进行Beta测试
- 曲轴位置传感器
- UIWindow UIScreen UIViewController UIView之间的关系
- iOS 笔记八:Core Animation、Dynamic Animation、 UIDynamicBehavoir
- 整理 iOS 9 适配中出现的坑
- Eclipse下导入外部jar包的3种方式
- mount.nfs: access denied by server while mounting 一个解决办法
- spring注解方式 idea报could not autowire
- 腾讯Bugly参展北京MDCC 2015
- maven 安装
- IntelliJ Idea 常用快捷键列表
- 随笔
- Ruby -reverse',upcase' & '.downcase'
- golang channel basic
- 如何调试QEMU