7 个解决方案
#1
如果你的变量没有加 static, 那么每个线程进入这个函数时会从线程的栈里面来分配变量, 是不会被共享的.
如果你加了 static, 那就相当于全局变量, 是所有线程共享的了.
如果你加了 static, 那就相当于全局变量, 是所有线程共享的了.
#2
To:adlay,谢谢回复!
没有加static,就是主函数外部定义的int类型的非静态成员变量index ,然后主函数的最开始处初始化index的值为0,主函数中还会调用其他函数例如AA,函数AA里会使用这个外部定义的变量index,并对其++。不知道是不是因为定义的地方不对,但我必须把index定义在主函数外面,因为主函数里要调用的方法AA需要使用这个index。
没有加static,就是主函数外部定义的int类型的非静态成员变量index ,然后主函数的最开始处初始化index的值为0,主函数中还会调用其他函数例如AA,函数AA里会使用这个外部定义的变量index,并对其++。不知道是不是因为定义的地方不对,但我必须把index定义在主函数外面,因为主函数里要调用的方法AA需要使用这个index。
#3
如果多线程访问同一个变量,需要对这个变量进行加锁,如临界区等
#4
To:paschen,谢谢回复!
正常应该不会这样的,不知道犯的什么错,难道真要加锁吗,我没做过,我研究一下。
正常应该不会这样的,不知道犯的什么错,难道真要加锁吗,我没做过,我研究一下。
#5
我做了下实验,这个index不在主函数外定义了 ,而是定义在主函数里,调用其他函数AA时,作为实参传入,这样就正常了。虽然可以解决问题,但之前的问题确实不明就里。
#6
你究竟是定义在函数里的局部变量还是定义在函数外的全局变量? 自己说来都是矛盾的.
如果是在函数外, 全局变量当然是共享的了.
#7
第一次说的是错的,是定义在主函数外面。我现在定义在里面就正常了。我也知道问题在哪里了,写JAVA写多了,每个文件就是一个类,里面定义的类成员变量如果不加static就不是全局的,只属于类的实例。。。可是在C里我没有用到类,我习惯性地把定义在函数外部的非静态变量也当成非全局了。。。
#1
如果你的变量没有加 static, 那么每个线程进入这个函数时会从线程的栈里面来分配变量, 是不会被共享的.
如果你加了 static, 那就相当于全局变量, 是所有线程共享的了.
如果你加了 static, 那就相当于全局变量, 是所有线程共享的了.
#2
To:adlay,谢谢回复!
没有加static,就是主函数外部定义的int类型的非静态成员变量index ,然后主函数的最开始处初始化index的值为0,主函数中还会调用其他函数例如AA,函数AA里会使用这个外部定义的变量index,并对其++。不知道是不是因为定义的地方不对,但我必须把index定义在主函数外面,因为主函数里要调用的方法AA需要使用这个index。
没有加static,就是主函数外部定义的int类型的非静态成员变量index ,然后主函数的最开始处初始化index的值为0,主函数中还会调用其他函数例如AA,函数AA里会使用这个外部定义的变量index,并对其++。不知道是不是因为定义的地方不对,但我必须把index定义在主函数外面,因为主函数里要调用的方法AA需要使用这个index。
#3
如果多线程访问同一个变量,需要对这个变量进行加锁,如临界区等
#4
To:paschen,谢谢回复!
正常应该不会这样的,不知道犯的什么错,难道真要加锁吗,我没做过,我研究一下。
正常应该不会这样的,不知道犯的什么错,难道真要加锁吗,我没做过,我研究一下。
#5
我做了下实验,这个index不在主函数外定义了 ,而是定义在主函数里,调用其他函数AA时,作为实参传入,这样就正常了。虽然可以解决问题,但之前的问题确实不明就里。
#6
你究竟是定义在函数里的局部变量还是定义在函数外的全局变量? 自己说来都是矛盾的.
如果是在函数外, 全局变量当然是共享的了.
#7
第一次说的是错的,是定义在主函数外面。我现在定义在里面就正常了。我也知道问题在哪里了,写JAVA写多了,每个文件就是一个类,里面定义的类成员变量如果不加static就不是全局的,只属于类的实例。。。可是在C里我没有用到类,我习惯性地把定义在函数外部的非静态变量也当成非全局了。。。