trace帮助隐藏错误

来源:互联网 发布:安卓游戏编程 编辑:程序博客网 时间:2024/05/12 12:42

 

最近查错,发现这样的代码,多线程访问有潜在问题。

 

int create_obj_from_config()

{

static int sl_option = -1;

 

if ( -1 == sl_option )

{

critical_section.enter();

 

sl_option = get_int_from_config_file( key_value, default_option );

 

trace_to_comport( "option = %d/n", sl_option );

 

critical_section.leave();

}

}

 

错误的现象是 : 把 trace_to_comport 去除后, 程序就起不来了。

把 trace_to_comport换成 Sleep(10),还能正常起来。

 

原因是sl_option在访问(read)之前,没有保护。

 

修改方法:

 

 

int create_obj_from_config()

{

static int sl_option = -1;

 

if ( -1 == sl_option )

{

critical_section.enter();

 

if ( -1 == sl_option )

{

sl_option = get_int_from_config_file( key_value, default_option );

 

//trace_to_comport( "option = %d/n", sl_option );

}

 

critical_section.leave();

}

}