线程同步:当一个线程对内存进行操作时,其他线程都不可以对这个内存地址进行操作,知道发哦线程完成操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。
为什么要实现线程同步:一般情况下,创建一个线程时不能提高程序的执行效率的,所以要创建多个线程,但是多个线程同时运行时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入操作时,由于cpu时间调度上的问题,写入数据会被多次覆盖,所以就要时线程同步。同步就是协同步调,按预定的先后顺序进行运行。
方式一:
threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁
方式二:
信号量也是提供acquire release方法,每当调用acquire方法时候如果内部计数器大于0,则将其减1,如果内部计数器等于0,则会阻塞该线程,直到有线程调用了release方法将内部计数器更新到大于1的位置。
方式三:
条件判断,即这种机制是在满足特定的条件后,线程才可以访问相关的数据。
使用condition类来完成,由于它也可以像锁那样用,所以它有acquire方法和release方法,而且它还有wait, notify, notifyall方法。
方式四:
同步队列put方法和task-done方法,queue有一个未完成任务数量num,put一次num+1 ,task一次num-1 任务都完成时任务结束。