Double Checked Locking模式的详细介绍
之前在使用Double Check Locking 模式时,发现自己还是不太理解。于是写个记录,其实很简单,一看就明白了。 应用特别说明: 1.Double Check Locking模式是singleton的多线程版本,如果是单线程则应使用singleton。 2.Double Check Locking模式依就会使用锁——临界区锁定,不要以为可以避免使用锁。 3.Double Check Locking 解决的问题是:当多个线程存在访问临界区企图时,保证了临界区只需要访问一次。 下面是其适用特点: 1.多个线程试图并发访问一个临界区; 2.临界区只需执行一次; 分析如下3种方法: //class singleton //:s1- singleton* get_instance(void) { lock(); if( instance == 0) { instance = new singleton; } unlock(); return instance; } **存在的问题是:无论是否已经初始化都要加锁,增加了负荷,已经没有所谓的并发性能了。 //:s-2 singleton* get_instance(void) { if( instance == 0){ lock(); instance = new singleton; unlock(); } return instance; } **存在的问题是:不能保证临界区只初始化一次,没能实现singleton的基本功能; //:s-3 singleton* get_instance(void) { if( instance == 0){ lock(); if( instance == 0 ) instance = new singleton; unlock(); } return instance; } **解决路上述问题——双检锁模式。