目录
你如何理解“临界”这个词?
那你如何理解在计算机领域下的“临界”这个词呢?
如何理解计算机领域中的“同步”这个词呢?
你如何理解critical这个单词?
单标志法:
双标志先检查法
双标志后检查法(先上锁再检查)
Peterson算法
人的一生会面临多少次说谎话与被欺骗的时刻?
这一代最杰出的人才不仅致力于让人们点击广告,而且编写了更加高级的大众监视程序。
你如何理解“临界”这个词?
"临界"这个词有不同的含义,具体取决于上下文。以下是几种常见的理解方式:
-
物理学中的临界:在物理学中,临界通常指某个物理系统在某种条件下经历从一种状态到另一种状态的临界点或临界状态。例如,液体在一定温度下转变为气体,这个温度被称为临界温度。
-
数学中的临界:在数学中,临界通常表示某个参数或变量取得临界值的情况。临界点是函数或方程的临界值,对于这个值,函数或方程可能会发生突变、趋近无穷大或变得不连续。
-
社会科学中的临界:在社会科学中,临界可以指一种状态或条件的临界点,表示在该点之前和之后会发生重大的变化或转折。例如,经济学中的临界点可以表示经济增长的阈值,超过该阈值将产生显著的经济影响。
-
生物学中的临界:在生物学中,临界可以表示生物体或生态系统的某种状态或条件达到关键的临界点。例如,生物多样性中的临界值表示一个生态系统中物种数量的最小限度,低于这个限度可能会导致生态系统的不稳定和崩溃。
总而言之,"临界"这个词的理解需要根据具体的学科领域和语境来确定。以上只是一些常见的理解方式,具体含义可能因情境而异。
那你如何理解在计算机领域下的“临界”这个词呢?
在计算机领域下,"临界"通常指的是共享资源在并发环境中的访问限制。临界区(Critical Section)是指一段代码或一段程序,在这段代码或程序中访问共享资源的操作需要进行同步或互斥,以避免多个并发执行的线程或进程同时访问共享资源而引发的竞争条件或数据不一致性的问题。
临界区的存在是由于并发环境下多个线程或进程可以并行执行,而对于某些共享资源,同时访问可能导致意想不到的结果或错误。为了保证数据的一致性和避免竞态条件(Race Condition),在临界区的代码段中需要采用适当的同步机制,如互斥锁(Mutex)、信号量(Semaphore)、条件变量(Condition Variable)等,来确保在任意时刻只有一个线程或进程能够进入临界区进行访问。
在编程中,正确地设计和实现临界区的同步机制是确保并发程序正确性和稳定性的关键。通过合理地划分临界区和选择适当的同步机制,可以保证共享资源的正确访问顺序,避免数据竞争和不一致性,并最大程度地提高程序的性能和并发度。
因此,在计算机领域中,“临界”一词常常用于描述并发编程中需要同步访问的共享资源区域和相应的同步机制。
(其实对于临界的理解,应该就是多对一的问题,处理不过来的这个临界的状态它是临界)
这里对于互斥的讲解我认为是比较好的,如果我们只关注于同步和异步,而不关注互斥呢?
就会导致这里A.B的内容打串的问题
如何理解计算机领域中的“同步”这个词呢?
在计算机领域中,"同步"(Synchronization)指的是协调多个并发执行的线程、进程或任务之间的操作顺序和状态,以确保它们按照预期的方式进行交互和协作。
并发是指多个计算实体(如线程、进程)同时执行,它们可以在不同的执行环境中独立运行,并在共享资源的访问上存在竞争关系。在这种情况下,缺乏适当的同步机制可能会导致竞态条件(Race Condition)、数据不一致、死锁(Deadlock)等问题。
避同步的目的是为了确保并发执行的计算实体之间的相互作用按照特定的顺序进行,以免不一致和错误的结果。以下是一些常见的同步概念和机制:
-
互斥(Mutex):互斥是一种同步机制,用于限制对共享资源的访问,确保在任意时刻只有一个线程或进程可以访问该资源。通过互斥锁或信号量等机制,只有持有锁的线程才能执行临界区的代码。
-
条件变量(Condition Variable):条件变量用于线程间的协调和通信。一个线程可以等待某个条件的满足,而另一个线程可以在满足条件时发出信号,通知等待的线程继续执行。
-
信号量(Semaphore):信号量是一种计数器,用于控制对共享资源的并发访问。通过对信号量进行加锁和解锁操作,可以限制同时访问资源的线程数量。
-
屏障(Barrier):屏障用于确保多个线程在到达某个点之前必须等待,然后同时开始执行后续操作。屏障可以用于同步多个线程之间的计算结果,以便它们在某个点上保持一致。
-
同步原语(Synchronization Primitives):同步原语是指编程语言或操作系统提供的基本同步工具,如锁、条件变量、原子操作等,用于实现复杂的同步需求。
通过合理地使用这些同步机制,开发人员可以控制并发执行的顺序、确保数据的一致性,并避免并发问题的发生。同步在多线程编程、并行计算、分布式系统等领域都起着重要的作用,以确保程序的正确性、可靠性和性能。
同步的重点在于按顺序
你如何理解critical这个单词?
"critical"这个单词有多重含义,具体取决于上下文。以下是几种常见的理解方式:
-
批判性的:在这种意义上,"critical"表示对事物进行仔细评估、分析和评判的能力或倾向。批判性思维强调对信息和观点进行深入思考、逻辑推理和评估,以形成独立、明智的判断。
-
关键的:当描述某物为"critical"时,表示它是至关重要的、不可或缺的,对于某个目标或结果的实现至关重要。这个意义上的"critical"强调了某物的重要性和紧迫性。
-
危急的:"critical"也可以表示处于紧急、危险或临界状态的情况。这可能涉及到医疗紧急情况、危机管理、紧急救援等领域。
-
批评的:在某些情况下,"critical"可以表示对某人或某事进行严厉评判或批评。这种用法强调了对缺点、问题或错误的指出和指责。
总而言之,"critical"这个词具有多个含义,具体意义取决于使用环境和上下文。以上列举的解释是其中的一些常见含义。
单标志法:
单标志法存在的主要问题是:违背“空闲让进”原则
其实知识之间绝对是互通的,因为其背后反映的其实都是思想,我们实现其实都是比较菜的,原因是,从1到100,没有从0到1难。
双标志先检查法
双标志先检查法的主要问题是:违反“忙则等待”原则。
原因在于,进入区的“检查”和“上锁”两个处理不是一气呵成的。“检查”后,“上锁”前可能发生进程切换。
同时进入临界区
双标志后检查法(先上锁再检查)
若按照①⑤②⑥.…的顺序执行,P0和P1将都无法进入临界区
因此,双标志后检查法虽然解决了“忙则等待”的问题,但是又违背了“空闲让进”和“有限等待”
原则,会因各进程都长期无法访问临界资源而产生“饥饿”现象。
就是啥,就是小的把1厕所占了,把它拉满了,之后老的把二号占了,也把它拉满了,之后小的想要去2号继续拉,二号又想去一号,但是他们都相互占着自己想去上的厕所,就导致了一种僵持的状态。
这几个算法,其实说到底还是博弈论
Peterson算法
占用CPU资源
就是Peterson算法,看似虽然没有忙等,有谦让,但是其一直进行while循环,也是一种对于资源的浪费。