为了账号安全,请及时绑定邮箱和手机立即绑定

一个线程进入a函数然后另一个线程进入B函数将i改成3,那么a函数中那个线程在获取的i的值会是3吗?

一个线程进入a函数然后另一个线程进入B函数将i改成3,那么a函数中那个线程在获取的i的值会是3吗?

C#
汪汪一只猫 2023-03-02 22:18:37
a(ref int i){//i=?}b(){i=3;}主函数有个变量K,她执行的a函数~另一个线程不写了~mian(){a(K);}大概这样~能看懂就好了~
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

试试不就知道了,我觉得应该会改变的。

查看完整回答
反对 回复 2023-03-06
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

不一定。

多线程当中最忌讳的就是两个线程同时对同一个公共变量操作。

因为处理器调度机制的问题,你这个公共变量无论变化与不变化,都是正常的。

如果非要这么写,建议使用信号量,来保证两个线程读/写 i 的时候是互斥的。

示例:


Semaphore mutex = new Semaphore(1, 1);void threadA(ref int i) {    mutex.WaitOne();    // 对 i 读/写    mutex.Release();}void threadB(ref int i){    mutex.WaitOne();    // 对 i 读/写    mutex.Release();}// 以上代码仅供参考以帮助理解信号量的用法。


查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信