社区
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;
}
...全文
576
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变量时,会发生问题。
因为它是静态的,所以多个线程实质上共享了它,但在访问它时却没有加锁。
static
变量 类实例变量
局部变量
的 线程安全
问题
线程,是我们项目
中
绕不过的重点领域。提到线程,就常会听到线程安全的术语。那什么是线程安全呢?通俗点说,就是线程访问时不产生资源冲突。其实,这是一个有点难以定义的概念,不是很容易让人一听就懂的概念。“一个类可以被多个线程安全调用就是线程安全的”《Java
编程
并发实践》。 来说说静态变量、实例变量、
局部变量
在
多线程
下的安全
问题
吧! (一)静态变量:线程非安全 1、静态变量:
使用
static
关键字定义的变量。
static
可以修饰变量和方法,也有
static
静态代码块。被stati...
Java
多线程
中
static
变量的
使用
Java
中
没处理好同步 导致两个线程同时为一个
static
变量赋值 会导致什么后果? Java
中
没处理好同步 导致两个线程同时为一个
static
变量赋值 会导致什么后果?仅仅是多耗资源还是会引发异常? 不会耗资源 也不会引发异常 而是程序出现逻辑错误,如本来该出现 3 的地方出现了 2 …,这比前两种情况更严重 Java
多线程
中
static
变量的
使用
线程,是我们项目
中
绕不过的重点领域。提到线程,就常会听到线程安全的术语。那什么是线程安全呢?通俗点说,就是线程访问时不产生资源冲突。其实,这是一个有点难以
基础巩固-java-Java
多线程
中
static
变量的
使用
有时候,对于在
多线程
中
使用
static
变量有没有冲突,是否存在安全
问题
不能十分的确定。在
使用
过程
中
有点含糊,总想找点时间好好追究一下,可总因开发项目时间的紧迫而搁浅。我想,没有做进一步的研究而拿项目繁忙说事,这是自己的借口吧! 鲁迅先生曾说过:“时间就像海绵里的水,只要愿挤,总还是有的”。不管肿(怎)么说,这事还是要做的啊。如果越往后推,可能造成的潜在影响更大。这始终是个隐患...
多线程
之全局变量和
局部变量
对于变量来讲
局部变量
属于线程,会存储在栈
中
static
修饰的变量,会存储在堆
中
全局变量存储在什么位置需要根据变量类型来判断,但是全局变量赋值后,对于
多线程
来讲,很容易造成重复赋值的垃圾数据 解决方法: 尽量避免
使用
全局变量或
static
修饰的变量 ...
static
变量与全局、
局部变量
的区别
java之
static
变量与全局、
局部变量
的区别
static
变量与全局、
局部变量
的区别 全局变量(外部变量)的说明之前再冠以
static
就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章