社区
C语言
帖子详情
多线程编程中使用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;
}
...全文
702
8
打赏
收藏
多线程编程中使用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; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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变量时,会发生问题。
因为它是静态的,所以多个线程实质上共享了它,但在访问它时却没有加锁。
全球各国汇率、短长期、政策利率数据(1914-2024.3)
根据国际货币基金组织(IMF)等平台的数据,整理了全球各国的兑美元汇率,短期利率、长期利率、政策利率数据,时间范围最新至2024年3月,希望对大家有所帮助 一、数据介绍 数据名称:全球各国汇率、短长期、政策利率数据 数据范围:全球国家 样本数量:76403条 数据年份:1914-2024.3 数据说明:包含兑美元汇率、短期利率、长期利率、政策利率 更新时间:2024年3月 二、指标范围 单位 国家 年份 兑美元汇率-月度均值 兑美元汇率-年度均值 短期利率 长期利率 政策利率
YOLO算法实验室电子仪器电源状态目标检测数据集-60张-标注类别为关机状态-开机状态.zip
YOLOv11目标检测实战项目
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章