09-同步的概念

目标

  • 能够说出同步和异步的区别
  • 能够知道使用线程同步可以解决竞争资源问题

1. 同步和异步

同步: 多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才能继续执行, 只有一个主线。如:你说完,我再说(同一时间只能做一件事情)

异步多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线。如:发微信(可以不用等对方回复,继续发)、点外卖(点了外卖后,可以继续忙其他的事情,而不是坐等外卖,啥也不做)

image-20180614001100529

image-20180614002035522

2. 解决线程同时修改全局变量的方式

对于上一小节提出的那个计算错误的问题,可以通过{% em color="#fff700" %}线程同步{% endem %}来进行解决

思路,如下:

  1. 系统调用t1,然后获取到g_num的值为0,此时上一把锁,即不允许其他线程操作g_num
  2. t1对g_num的值进行+1
  3. t1解锁,此时g_num的值为1,其他的线程就可以使用g_num了,而且是g_num的值不是0而是1
  4. 同理其他线程在对g_num进行修改时,都要先上锁,处理完后再解锁,在上锁的整个过程中不允许其他线程访问,就保证了数据的正确性

image-20180614004531345

image-20180630221746334