- 博客(7)
- 资源 (2)
- 收藏
- 关注
转载 c++字节对齐
规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该“变量的类型”或者指定对齐系数所占用的字节数的倍数,当变量类型和指定系数不同时,取小的。整个结构大小按照以上对齐计算,但必须是最大类型大小或者指定对齐系数的整数倍,也就是最后一个成员变量要圆整,当最大类型大小和指定对齐系数不一致的情况,取小的。当成员变量本身是结构体的时候,不能用整个struct大小计算起始地址,而应该用结构体中最大类
2012-05-27 10:50:24 874
原创 读写锁
多个线程产生race condition,根据业务逻辑,分为共享资源的读和写,多个线程的读不会对数据造成破坏。如果不区分读和写,每次遇到race condition便锁住不允许其他线程访问,造成效率低下。根据以上逻辑,可以用信号量来实现多个线程的共享读,互斥写。 //读写递归锁 class RWRecLock { public: typedef AutoRLockT AutoRLock
2012-05-07 22:18:28 621
原创 CRITICAL_SECTION同步易出错的地方
众所周知通过CRITICAL_SECTION可以对多个线程同步,然而加锁和解锁的次数不匹配将导致死锁: class CLock { public: CLock() { InitializeCriticalSection(&m_cs); } ~CLock() { DeleteCriticalSection(&m_cs); } void Lock() { Ente
2012-05-07 19:58:03 1445 1
转载 C++转型操作符:const_cast、dynamic_cast、static_cast、reinterpret_cast
C++转型操作符 C++通过引进四个新的类型转换操作符克服了C风格类型转换的缺点,这四个操作符是: const_cast( expression ) dynamic_cast( expression ) static_cast( expression ) reinterpret_cast( expression ) 在大多数情况下,对于这些操作符你只需要知道原来你习惯
2012-05-01 23:13:52 598
转载 scoped_ptr解析
scoped_ptr解析 《超越C++标准库-Boost库导论》 头文件: "boost/scoped_ptr.hpp" boost::scoped_ptr 用于确保动态分配的对象能够被正确地删除。scoped_ptr有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权,然而auto_ptr却可以。事实上,scoped_ptr永远不能被复制或被赋值!scoped_
2012-05-01 22:58:23 607
转载 当析构函数遇到多线程 ── C++ 中线程安全的对象回调
转自:http://www.cnblogs.com/Solstice/archive/2010/02/10/dtor_meets_threads.html#_Toc8041 摘要 编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x 的
2012-05-01 13:03:17 2089
转载 shared_ptr解析
shared_ptr解析 《超越C++标准库-Boost库导论》 头文件: "boost/shared_ptr.hpp" 几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了管理被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计数降为零,没有对象再需要这个共享的对象时,这个对象就自动被销毁了。引用计数智能指针可以分为侵入式(intrusive)和
2012-05-01 12:54:40 4161
WindowsAPI参考大全(中文)
2008-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人