首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

多线程编程中使用STATIC局部变量有关问题

2012-02-15 
多线程编程中使用STATIC局部变量问题以下函数会在一个多线程程序中被调用,会产生什么问题???intGetMsgId(c

多线程编程中使用STATIC局部变量问题
以下函数会在一个多线程程序中被调用,会产生什么问题???

int   GetMsgId(char   *MsgIdBuf)
{
        static   unsigned   int   sequencenum   =   0;         //序列号0000--9999。到了9999自动丛0开始  

        sprintf(MsgIdBuf,   "%04d ",sequencenum++);
        if   (sequencenum   >   9999)
        {
                sequencenum   =   0;
        }

        return   0;
}

[解决办法]
当多个线程“抢着”修改sequencenum变量时,会发生问题。
因为它是静态的,所以多个线程实质上共享了它,但在访问它时却没有加锁。
[解决办法]
就是你想要的和实际得到的不一定符合
[解决办法]
加锁,要看lz的需求了,

[解决办法]
静态变量的初始化,放到函数中

--

这没有问题

热点排行