当一个程序中的两个线程同时向这个程序里的全局变量增加数时会发生什么?
理论上来说,应该是200000,但是最后结果不是200000。 这是多个线程同时操作一个全局变量引起的错误。
要解决这个错误,用互斥锁即可:
这样就可以成功,但是这样会增加运行的时间。 运行时间如下:
此时,引入原子操作。
原子,在化学中意味着不可再分,在编程中就意味着操作不可被打断。只要把原子操作作用在代码段里。
互斥操作作用在语句上,而原子操作作用在变量上。
需要有:
#include<atomic>
显然,时间减少了。
atomic 是一个模板类。c(0)是构造函数。