private static int A;
public static int GetA2(int a)
{
A = a;
return A*A;
}
public static int GetA2(int a)
{
A = a;
return A*A;
}
解决方案 »
- 小妹求救!求救!问一个超难的TabControl去边框的问题!
- DataGridView的列数是动态的,如何实现
- 关于winform中listview
- 怎样把几个字符串依次同时写进一个流文件中
- 用DataGridView创建主从表的问题
- wiform 怎样将一个字符转为控件?
- 最近研究垃圾回收机制,有点心得和问题,希望大家进来讨论,我相信大家都会有收获的。。。。。。。。。。。
- 高分求:可以在windows窗体程序中使用的HTML编辑器(组件或者是控件最好支持C#)
- 怎样将写好的程序打包成Setup.exe
- 恭喜思归和TheAres,顺便我的遗憾(散分!!!!!!)
- C#有一字符串加密问题,望高手赐教
- 这是PETSHOP中WEBUI中缺少的东西?那位能给我说说下载地址啊?22个项目我都有现在就缺这个???
去掉静态试试
就像茅坑一次只足够让一个人进去,使用者在使用前要锁门防止另一个人进入,如果你不锁门,别人别人憋不住了非要和你挤,那么结果......不知道......
因为多线程的运行是无序的
如:线程1进入方法,运行A=a;,但还没有运行return A*A;
CPU时间片被抢占,另一个线程进入运行,传入了新的a值,因为是静态的
所以第二个线程对A值的更改会影响第一个线程,造成返回值错误,而实例不会发生这种问题如果有必要的话,对这个数做同步吧,或者不要缓存A,除非共享的变量,最好不要用静态,同步影响性能,同步方法很多,比如lock,mutex等,单增变量还一个呢
private static int A;
public static int GetA2(int a)
{
lock(this)
{
A = a;
return A*A;
}
}
谢谢各位。