多线程编程中使用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的需求了,
[解决办法]
静态变量的初始化,放到函数中
--
这没有问题