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

heskyII 2007-08-02 11:35:24
以下函数会在一个多线程程序中被调用,会产生什么问题???

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

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

return 0;
}
...全文
576 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
softwarewander 2007-08-02
  • 打赏
  • 举报
回复
最主要看用途,
不过一般来说,静态变量初始化放到函数中, 尤其是大量被调用的时候,会有问题。
loops 2007-08-02
  • 打赏
  • 举报
回复
#define ThreadSafe __declspec( thread )
static ThreadSafe unsigned int sequencenum = 0;
可以为每一个线程都单独创建一个全局变量。

windows的消息队列,也是每个线程有一个。
heskyII 2007-08-02
  • 打赏
  • 举报
回复
就是需要专门为这个变量进行lock/unluck操作?
ouyh12345 2007-08-02
  • 打赏
  • 举报
回复
静态变量的初始化,放到函数中

--

这没有问题
softwarewander 2007-08-02
  • 打赏
  • 举报
回复
加锁,要看lz的需求了,
ouyh12345 2007-08-02
  • 打赏
  • 举报
回复
就是你想要的和实际得到的不一定符合
softwarewander 2007-08-02
  • 打赏
  • 举报
回复
静态变量的初始化,放到函数中,好像有点。。。

晨星 2007-08-02
  • 打赏
  • 举报
回复
当多个线程“抢着”修改sequencenum变量时,会发生问题。
因为它是静态的,所以多个线程实质上共享了它,但在访问它时却没有加锁。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧