linux中pthread_create 创建的线程无法修改全局变量
代码如下:
status.cpp
CCurStatus g_SystemStatus; //系统当前状态,用于主进程和逻辑处理线程之间的通讯
float volatile g_curMoney = 100.11;
status.h
extern CCurStatus g_SystemStatus;
extern float volatile g_curMoney;
thread.cpp 中#include"status.h"
static int process_command(char * protocolData)
{
float tmp = 20000.99;
float *p_fmoney = &tmp;
log_write(
LOG_LEVEL_TRACK,
"__FILE__:%s __LINE__:%d LEVEL:%d consume the money is:%10.2f %10.2f %10.2f\n",
__FILE__, __LINE__, LOG_LEVEL_TRACK, g_SystemStatus.m_fMoney,
g_curMoney, *p_fmoney);
g_SystemStatus.m_fMoney = *p_fmoney;
g_curMoney = *p_fmoney;
log_write(
LOG_LEVEL_TRACK,
"__FILE__:%s __LINE__:%d LEVEL:%d consume the money is:%10.2f %10.2f %10.2f\n",
__FILE__, __LINE__, LOG_LEVEL_TRACK, g_SystemStatus.m_fMoney,
g_curMoney, *p_fmoney);
sleep(10);
}
void * start_routine(void * arg) //这个是线程回调接口
{
float tmp = 20000.99;
float *p_fmoney = &tmp;
log_write(
LOG_LEVEL_TRACK,
"__FILE__:%s __LINE__:%d LEVEL:%d consume the money is:%10.2f %10.2f %10.2f\n",
__FILE__, __LINE__, LOG_LEVEL_TRACK, g_SystemStatus.m_fMoney,
g_curMoney, *p_fmoney);
g_SystemStatus.m_fMoney = *p_fmoney;
g_curMoney = *p_fmoney;
log_write(
LOG_LEVEL_TRACK,
"__FILE__:%s __LINE__:%d LEVEL:%d consume the money is:%10.2f %10.2f %10.2f\n",
__FILE__, __LINE__, LOG_LEVEL_TRACK, g_SystemStatus.m_fMoney,
g_curMoney, *p_fmoney);
sleep(10);
process_command(char * protocolData);//这个接口中无法对全局变量赋值
}
在以上代码中对全局变量赋值都没问题,但是一进入process_command这个接口,对全局变量赋值就失效,打印后的结果:
g_curMoney 和 g_SystemStatus.m_fMoney 都变成了0.00。
请高手指教!