异步与同步

对于同步与异步,有时候一直对于这个概念有点只能意会但是不知道怎么表达的意思,好好的总结好好的用语言表达一下,提升自己的语言表达能力。

所谓异步就是说干一些事情,当遇到有某些事情需要等待的时候,我抽空去干其他的事情,当上述的某些事情准备好了的时候我再来进行处理。

所谓同步就是说干这些事情,就算某些事情需要等待的时候,也不可以去干其他的事情,必须等着上述某些事情准备好后一件一件按顺序处理。

可以得出异步的执行效率要比同步的执行效率更高;但是,有些情况我们必须使用同步进行处理:

多线程环境中的数据共享问题:

    首先,对于线程来说,所有线程共享内存和变量等,因此当多个线程需要同时访问同一个共享资源时,它们需要以某种顺序来进行共享资源的使用以此来保证某一特定时刻只有一条线程在访问该共享资源。显然对于异步来说,运行结果是无法进行预计的。这种情况,我们必须对数据进行同步,就是说限制一次只能有一个线程进行资源的访问,其他线程必须等待。

  

实现同步的方法:

   1.临界区

    通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资 源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

   2.互斥

    采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

   3.信号量

    它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。      

   4.事件

    通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作 。

原文地址:https://www.cnblogs.com/ShaunChen/p/5716593.html