资源_给我一些免费的luan_lu.n

问题来源:多线程开发的时候共享全局变量会带来资源竞争效果也就是数据不安全。

分析:t1线程对g_num进行一百万次加一t2线程对g_num进行一百万次加一,我们预期最后的结果應该是二百万但是看到运行的结果却不是我们预期的值,这是为什么了
:这是因为g_num += 1在执行的时候会解析成,先获取g_num的值再进行加┅,最后才是保存到g_num中那么我们可以模拟一下cpu执行。

可能会出现以下的错误情况! 答:当work1先获取g_num的值等于0调度系统将work1调为睡眠,切换箌work2先获取g_num的值也等于0,于是进行加一g_num变为1,work2又睡眠切换到work1,进行增一但是这时候是0+1变为1。而再切换到work2获取却是1了,将之前值覆蓋导致最后的结果不足预期的结果,这就是主要原因


那么了解了问题所在,那有什么办法解决呢

当多个线程几乎同时修改一个共享數据的时候,需要进行同步控制线程同步能够保证多个 线程安全的访问竞争资源(全局内容),最简单的同步机制就是使用互斥锁 某个线程要更改共享数据时,先将其锁定此时资源的状态为锁定状态,其他线程就不能更 改直到该线程将资源状态改为非锁定状态,也就是釋放资源其他的线程才能再次锁定资 源。互斥锁保证了每一次只有一个线程进入写入操作从而保证了多线程下数据的安全性。

总结:通过使用互斥锁解决共享线程资源不安全的问题的实质就是当线程操作资源的时候将资源锁住,操作结束后解锁。

}

我要回帖

更多关于 nhehnlu 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信