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

a(ref int i){//i=?}
b(){i=3;}
主函数有个变量K,她执行的a函数~另一个线程不写了~
mian()
{a(K);}
大概这样~能看懂就好了~

汪汪一只猫
浏览 102回答 2
2回答

摇曳的蔷薇

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

猛跑小猪

不一定。多线程当中最忌讳的就是两个线程同时对同一个公共变量操作。因为处理器调度机制的问题,你这个公共变量无论变化与不变化,都是正常的。如果非要这么写,建议使用信号量,来保证两个线程读/写 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();}// 以上代码仅供参考以帮助理解信号量的用法。
打开App,查看更多内容
随时随地看视频慕课网APP