09-同步的概念
目标¶
- 能够说出同步和异步的区别
- 能够知道使用线程同步可以解决竞争资源问题
1. 同步和异步¶
同步: 多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才能继续执行
, 只有一个主线。如:你说完,我再说(同一时间只能做一件事情)
异步:多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响
,存在的多条运行主线。如:发微信(可以不用等对方回复,继续发)、点外卖(点了外卖后,可以继续忙其他的事情,而不是坐等外卖,啥也不做)
2. 解决线程同时修改全局变量的方式¶
对于上一小节提出的那个计算错误的问题,可以通过{% em color="#fff700" %}线程同步{% endem %}来进行解决
思路,如下:
- 系统调用t1,然后获取到g_num的值为0,此时上一把锁,即不允许其他线程操作g_num
- t1对g_num的值进行+1
- t1解锁,此时g_num的值为1,其他的线程就可以使用g_num了,而且是g_num的值不是0而是1
- 同理其他线程在对g_num进行修改时,都要先上锁,处理完后再解锁,在上锁的整个过程中不允许其他线程访问,就保证了数据的正确性