方法里的局部非静态变量,多线程访问时为什么会被共享了?

xiaoge22275 2016-08-16 04:56:52
我在主函数里定义了一个int类型的局部变量,在一个for循环中作为数组的访问下标,每循环一次会+1。单线程访问这个方法是正常的,但多线程访问时这个int变量竟然被共享了,同时去递增这个变量值,在多个线程中形成彼此相邻的不连续值,导致访问数组越界出错。我是做JAVA的,对C++不太熟悉,只是为了做个DLL给JAVA调用,之前用得好好的,现在增加了在JAVA中使用多线程去调用这个DLL才发现了问题。我觉得好奇怪,理论上这是不可能的,但由于我对C++的通讯机制不了解,也无从解决,希望有朋友能帮下忙,非常感谢!
...全文
358 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoge22275 2016-08-16
  • 打赏
  • 举报
回复
第一次说的是错的,是定义在主函数外面。我现在定义在里面就正常了。我也知道问题在哪里了,写JAVA写多了,每个文件就是一个类,里面定义的类成员变量如果不加static就不是全局的,只属于类的实例。。。可是在C里我没有用到类,我习惯性地把定义在函数外部的非静态变量也当成非全局了。。。
引用 5 楼 xiaoge22275 的回复:
我做了下实验,这个index不在主函数外定义了 ,而是定义在主函数里,调用其他函数AA时,作为实参传入,这样就正常了。虽然可以解决问题,但之前的问题确实不明就里。
www_adintr_com 2016-08-16
  • 打赏
  • 举报
回复
引用 楼主 xiaoge22275 的回复:
我在主函数里定义了一个int类型的局部变量,
引用 2 楼 xiaoge22275 的回复:
没有加static,就是主函数外部定义的int类型的非静态成员变量index ,
你究竟是定义在函数里的局部变量还是定义在函数外的全局变量? 自己说来都是矛盾的. 如果是在函数外, 全局变量当然是共享的了.
xiaoge22275 2016-08-16
  • 打赏
  • 举报
回复
我做了下实验,这个index不在主函数外定义了 ,而是定义在主函数里,调用其他函数AA时,作为实参传入,这样就正常了。虽然可以解决问题,但之前的问题确实不明就里。
xiaoge22275 2016-08-16
  • 打赏
  • 举报
回复
To:paschen,谢谢回复! 正常应该不会这样的,不知道犯的什么错,难道真要加锁吗,我没做过,我研究一下。
paschen 2016-08-16
  • 打赏
  • 举报
回复
如果多线程访问同一个变量,需要对这个变量进行加锁,如临界区等
xiaoge22275 2016-08-16
  • 打赏
  • 举报
回复
To:adlay,谢谢回复! 没有加static,就是主函数外部定义的int类型的非静态成员变量index ,然后主函数的最开始处初始化index的值为0,主函数中还会调用其他函数例如AA,函数AA里会使用这个外部定义的变量index,并对其++。不知道是不是因为定义的地方不对,但我必须把index定义在主函数外面,因为主函数里要调用的方法AA需要使用这个index。
www_adintr_com 2016-08-16
  • 打赏
  • 举报
回复
如果你的变量没有加 static, 那么每个线程进入这个函数时会从线程的栈里面来分配变量, 是不会被共享的. 如果你加了 static, 那就相当于全局变量, 是所有线程共享的了.
内容概要:本文详细探讨了机组组合优化模型的构建,旨在通过合理安排各类发电机组的启停计划和优化出力分配,实现电力系统在经济性和稳定性上的最佳平衡。文章首先介绍了电力系统的四大主要组件——传统火电机组、风电机组、光伏机组和储能系统的参数及运行特性。接着,围绕最小化系统总运行成本这一目标,设计了优化目标函数,并明确了包括功率平衡约束、机组出力上下限约束、风光发电功率约束、弃风弃光约束、爬坡速率约束、储能系统荷电状态约束、充放电功率约束和充放电互斥约束在内的多项约束条件。最后,文章列出了求解机组组合优化模型所需的关键变量,如传统机组的开停状态、机组出力、启停成本、风电光伏实际出力、弃风弃光比例及储能系统的充放电功率和荷电状态,以实现系统的经济调度和可再生能源的最大化利用。 适合人群:从事电力系统研究、规划和调度工作的工程师和技术人员,以及对电力系统优化感兴趣的科研人员。 使用场景及目标:①帮助电力系统工程师理解不同类型发电机组的特点及其对系统稳定性、经济性和环保性的影响;②为制定合理的电力系统调度策略提供理论依据和技术支持;③促进可再生能源的有效整合,提高电力系统的灵活性和可靠性。 其他说明:本文提供的模型和方法不仅适用于当前的电力系统,也可为未来含高比例可再生能源接入的电力系统提供参考。文中涉及的具体数学公式和参数设定为实际应用提供了详细的指导,有助于提升电力系统的运行效率和经济效益。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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