精华内容
下载资源
问答
  • 什么是临界资源?什么是临界区

    千次阅读 2021-07-06 01:59:40
    什么是临界区?题目类型:[问答题,简答题] 什么是临界资源?什么是临界区?匿名网友:参考答案: 临界资源是指一次仅允许一个进程访问的资源.临界区是指每个进程中访问临界资源的那段程序代码.试题难度:★★☆参考...

    导航:网站首页 >

    什么是临界资源?什么是临界区?

    题目类型:[问答题,简答题] 什么是临界资源?什么是临界区?

    匿名网友:

    参考答案: 临界资源是指一次仅允许一个进程访问的资源.临界区是指每个进程中访问临界资源的那段程序代码.

    试题难度:★★☆

    参考解析: 暂无解析

    匿名网友:

    临界区:每个进程中访问临界资源的那段程序叫做临界区。

    进程对临界区的访问必须互斥,每次只允许一个进程进去临界区,其他进程等待。

    临界资源:指每次只允许一个进程访问的资源,分硬件临界资源、软件临界资源。

    临界区管理的基本原则是: ①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。

    ②任何时候,处于临界区内的进程不可多于一个。

    如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。

    ③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。

    ④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

    匿名网友:

    临界资源是指每次仅允许一个进程访问的资源。

    属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。

    诸进程间应采取互斥方式,实现对这种资源的共享。

    每个进程中访问临界资源的那段代码称为临界区。

    显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。

    为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。

    如果此刻该临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区。

    匿名网友:

    当多个线程访问一个独占性共享资源时,可以使用\“临界区\”对象。

    任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止,这样就保证了不会在同一时刻出现多个线程访问共享资源。

    \r\n\r\nCCriticalSection类的用法非常简单,步骤如下:\r\n \r\n\r\n定义CCriticalSection类的一个全局对象以使各个线程均能访问,如CCriticalSection critical_section; \r\n在访问需要保护的资源或代码之前,调用CCriticalSection类的成员Lock)获得临界区对象: critical_section.Lock();\r\n\r\n在线程中调用该函数来使线程获得它所请求的临界区。

    如果此时没有其它线程占有临界区对象,则调用Lock)的线程获得临界区;否则,线程将被挂起,并放入到一个系统队列中等待,直到当前拥有临界区的线程释放了临界区时为止。

    \r\n访问临界区完毕后,使用CCriticalSection的成员函数Unlock)来释放临界区:critical_section.Unlock();\r\n\r\n再通俗一点讲,就是线程A执行到critical_section.Lock);语句时,如果其它线程B正在执行critical_section.Lock);语句后且critical_section. Unlock);语句前的语句时,线程A就会等待,直到线程B执行完critical_section. Unlock);语句,线程A才会继续执行。

    匿名网友:

    临界是指由某一种状态或物理量转变为另一种状态或物理量的最低转化条件;或者由一种状态或物理量转变为另一种状态或物理量。

    压力critical pressure物质处于临界状态时的压力压强。

    就是在临界温度时使气体液化所需要的最小压力。

    也就是液体在临界温度时的饱和蒸气压。

    各种物质的临界压力压强不同,如氧是4.87兆帕49.7公斤力/厘米2,氨是11兆帕112.2公斤力/厘米2,氯是7.46兆帕76.1公斤力/厘米2等。

    区不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。

    每个进程中访问临界资源的那段代码称为临界区Critical Section临界资源是一次仅允许一个进程使用的共享资源。

    每次只准许一个进程进入临界区,进入后不允许其他进程进入。

    多个进程中涉及到同一个临界资源的临界区称为相关临界区。

    程序调度法则进程进入临界区的调度原则是:1、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。

    2、任何时候,处于临界区内的进程不可多于一个。

    如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。

    3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。

    4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

    线程同步问题 如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。

    临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

    临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection)和LeaveCriticalSection)函数去标识和释放一个临界区。

    所用到的CRITICAL_SECTION结构对象必须经过InitializeCriticalSection)的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。

    否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。

    温度中文名称:临界温度 英文名称:critical temperature 定义:临界点的温度。

    水的临界温度为374.15℃。

    应用学科:电力一级学科;通论二级学科临界温度,使物质由气相变为液相的最高温度叫临界温度。

    匿名网友:

    临界资源是指每次仅允许一个进程访问的资源。

    属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。

    诸进程间应采取互斥方式,实现对这种资源的共享。

    每个进程中访问临界资源的那段代码称为临界区。

    显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。

    为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。

    如果此刻该临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区。

    ,谢谢...

    问题推荐

    展开全文
  • 临界区的实现原理

    2021-05-17 21:58:44
    如果有多个线程试图同时访问临界区,那么在有一个线程进入临界区后,其他试图访问的线程将被挂起,直到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到对临界区的互斥访问。(临界区中...

    临界区概述:

    用于多线程的互斥访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入临界区后,其他试图访问的线程将被挂起,直到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到对临界区的互斥访问。(临界区中一般都是一个简短的代码段)

    在WINDOWS中,临界区是一种应用层的同步对象,非内核对象。并且临界区优先采用自旋的方式进行抢占

    临界区API:

    临界区初始化以及删除:

    InitializeCriticalSection()

    DeleteCriticalSection()

    临界区两个操作原语:

    EnterCriticalSection()

    LeaveCriticalSection()

    临界区数据结构:

    typedef struct _RTL_CRITICAL_SECTION {

    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;

    //

    // The following three fields control entering and exiting the critical

    // section for the resource

    //

    LONG LockCount;

    LONG RecursionCount;

    HANDLE OwningThread; // from the thread's ClientId->UniqueThread

    HANDLE LockSemaphore;

    ULONG_PTR SpinCount; // force size on 64-bit systems when packed

    } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;

    _RTL_CRITICAL_SECTION_DEBUG数据结构

    typedef struct _RTL_CRITICAL_SECTION_DEBUG {

    WORD Type;

    WORD CreatorBackTraceIndex;

    struct _RTL_CRITICAL_SECTION *CriticalSection;

    LIST_ENTRY ProcessLocksList;

    DWORD EntryCount;

    DWORD ContentionCount;

    DWORD Flags;

    WORD CreatorBackTraceIndexHigh;

    WORD SpareWORD ;

    } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG; (代码来自VS2005 WINNT.h)

    _RTL_CRITICAL_SECTION 各字段解释:

    DebugInfo:指向一个调试用的数据,该结构的类型为RTL_CRITICAL_SECTION_DEBUG

    LockCount: 初始值-1,若结果大于等于0,表示该临界区已被线程占用。

    OwningThread: 当前拥有临界区的线程

    RecursionCount:所有者线程连续进入临界区的次数

    LockSemaphore: 内核对象句柄,用于告知操作系统,该临界区目前处于空闲状态,用于唤醒因等待临界区而挂起的线程

    SpinCount:MSDN对该字段做如下解释:

    "On multiprocessor systems, if the critical section is unavailable, the calling thread will spin

    dwSpinCount times before performing a wait operation on a semaphore associated with the critical

    section. If the critical section becomes free during the spin operation, the calling thread

    avoids the wait operation."

    在多处理器系统中,如果临界区已被占用,那么线程就自旋SpinCount次去获取临界区,而不是通过阻塞等待的方式去获取临界区。如果在自旋的过程中临界区空间,就可以直接进入临界区,减少等待时间(如果进入等待状态,需要用户态内核态的切换,代价较大)。主要意思就是为了提高效率,下面我们会分析什么叫自旋。

    临界区API实现过程

    InitialzeCriticalSection 在初始化的过程中,会测试CPU的数量,若CPU数量为1,则忙等待没有意义。则SpinCount=0,

    若CPU数量大于1,则设置SpinCount,在进入临界区时,会采取主动进入策略。

    EnterCriticalSection 1. 若临界区还未被占用,则更新临界区数据结构,表示调用线程已经获得访问临界区的权限,返回。

    2. 若线程在已经获取访问权限的情况下,再次EnterCriticalSection,则更新线程获取访问的次数(即连续Enter的次数)。

    3. 若临界区已经其他线程占用,则当前线程 通过SpinCount来控制忙等的次数,在SpinCount已经等于0还没有获得临界区对象的情况下,函数直接通过临界区对象内部的事件对象进行等待(等待及唤醒涉及到用户态和内核态的切换,不是最优方案,优先采用自旋的方式进入临界区)。忙等待是通过对LockCount进行原子读写操作实现。

    RtlLeaveCriticalSection 1. _RTL_CRITICAL_SECTION数据结构中相关标志位设置 ,比如RecursionCount--,如果为0,表示没有线程占用临界区

    2. 将当前占有线程句柄设为0,表示现在临界区目前处于有信号状态,可以被获取

    3. 若有其他线程在等待,唤醒等待线程

    a3a35f2f9e608518c70933d4e14c1235.gif

    通过该数据结构可以发现,在进程中,所有的临界区的DEBUG信息通过链表进行串接。在已知某个临界区对象的

    情况下, 通过链表数据结构,可以访问到数据的临界区对象。

    自旋:

    对于临界区的操作,(EnterCriticalSection)操作,采用的是主动进入临界区。意思就是,当没有能够进入时,不停的主动尝试进入,直至进入为止。这种主动进入的方式,称为自旋(也叫忙等待)。

    被动方式:获取不到后,进入等待队列,当要获取的对象被释放后,系统唤醒等待的线程,这个方式叫做被动方式。

    小结:

    1.进入灵界区和离开临界区是成对操作,进入临界区必须要有离开临界区否则临界区保护的共享资源将永远不会被释放。

    2.在使用临界区时,临界区间使用的代码最好简短,减少其他线程的等待时间,提高程序性能。

    3.临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

    4. 临界区是用户态下的对象,非内核对象,所以在使用时无需再用户态和内核态之间切换,效率明显要比其他用户互斥的内核对象高。

    参考:

    展开全文
  • 什么是临界区,如何解决冲突? 每个进程中访问临界资源的那段程序称为临界区,一次仅允许一个进程使用的资源称为临界资源。 解决冲突的办法: 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入,如已有...

    什么是临界区,如何解决冲突?

    每个进程中访问临界资源的那段程序称为临界区,一次仅允许一个进程使用的资源称为临界资源。

    解决冲突的办法:

    • 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入,如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;
    • 进入临界区的进程要在有限时间内退出
    • 如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
    展开全文
  • 临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。 属于临界资源的硬件有:打印机,磁带机等;软件有:消息队列,变量,数组,缓冲等。诸进程间采取互斥方式,...

    原文链接:https://blog.csdn.net/u013272948/article/details/53929572

    1.临界资源


     临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。

    属于临界资源的硬件有:打印机,磁带机等;软件有:消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。


    2.临界区:


     在操作系统中,有临界区的概念。每个进程中访问临界资源的那段代码称为临界区(criticalsection),每次只允许一个进程进入临界区,进入后,不允许其他进程进入。显然,若能保证进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。如果此刻该临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区。不论是硬件临界资源还是软件临界资源,多个进程必须互斥的对它进行访问。多个进程涉及到同一个临界资源的的临界区称为相关临界区。使用临界区时,一般不允许其运行时间过长,只要运行在临界区的线程还没有离开,其他所有进入此临界区的线程都会被挂起而进入等待状态,并在一定程度上影响程序的运行性能。
             操作系统需要合理的分配临界区以达到多进程的同步和互斥关系,如果协调不好,就容易使系统处于不安全状态,甚至出现死锁现象。

    展开全文
  • 内核程序临界区和普通临界区

    千次阅读 多人点赞 2020-12-20 09:25:54
    按照我的理解,临界资源有很多种,所以一个进程有可能会有很多个临界区,分别用来访问不同的临界资源。 这些临界区中,有的是用来访问操作系统内核中的数据结构或数据的,比如系统时钟(猜的),等等,叫做内核程序...
  • 文章目录1 临界区1.1 简介1.2 程序调度法则1.3 线程同步问题2 临界区操作原语2.1 定义全局的锁CRITICAL_SECTION2)...它是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权。 临界区(Critical S
  • 文章目录(1)临界区,临界资源和原子性问题(2)互斥量(锁)A:互斥锁B:锁的作用C:互斥锁实现的原理(3)可重入函数和线程安全A:可重入函数和线程安全B:常见的线程安全和不安全情况C:常见可重入和不可重入的...
  • 1.临界区

    2021-05-15 19:40:14
    临界区 指的是一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问的特性。 当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现, 以确保...
  • 保证只能由先进入临界区一个线程访问结束后,其他线程才可以继续访问共享的资源。以下为临界区的使用方法:*.h头文件:#include CRITICAL_SECTIONm_cs_test;///< 定义一个临界区对象*.cpp源文件使用方法:在类...
  • 多线程中,各个线程都要对共享变量进行操作,比如一个线程对共享变量进行写操作,一个线程对共享变量进行读操作。 这时候就可能会有chongt CRITICAL_SECTION 临界区
  • 临界区临界区就是在同一时刻只能有一个任务访问的代码区。在java中通常使用下面的方式来实现:synchronized(syncObject) {//critical section}当然也可以使用Lock对象来实现临界区。要访问临界区就要先获得...
  • 竞争条件和临界区

    2021-08-12 16:09:04
    竞争条件和临界区竞争条件临界区 竞争条件 在一些操作系统中,协作的进程可能共享一些彼此都能读写的公用存储区。这个公用存储区可能在内存中(可能是在内核数据结构中),也可能是一个共享文件。这里共享存储区的...
  • Linux----临界区解释

    2021-10-06 21:24:32
    关于临界区一个简单的解释可以是这样子的:由一个大型的进程派生两个或者多个线程。假设有两个协同工作的线程存在,也许这两个线程是为了共同处理一个大型的文件,那么这两个线程极大程度上会共享一些全局变量的。...
  • 来源 |痞子衡嵌入式今天给大家分享的是Cortex-M裸机环境下临界区保护的三种实现。搞嵌入式玩过 RTOS 的朋友想必都对 OS_ENTER_CRITICAL()、OS_EXIT_CR...
  • 多线程中的临界区

    2021-03-13 09:46:28
    临界区又叫关键代码段.在多线程共享变量时,用来安全读写共享变量.代码如下:CRITICAL_SECTIONg_csSync={};//临界区INTg_iData=0;DWORDWINAPIWriteThreadProc(LPVOIDlpParameter){//写线程while(1){Sleep(30);__try{...
  • } } /** * 你可以想象一下这种情况:某人交个你一个非线程安全的Pair类,而你需要在一个线程环境中使用它。通过创建 * PairManager类就可一个实现这一点,PairManager类持有一个Pair对象并控制它的一切访问。注意...
  • 使用互斥锁保证临界区的操作是线程安全的,但是单纯的使用互斥锁会导致CPU资源过多的浪费在检测条件是否满足的过程中。搭配条件变量的通知机制,会有效减少频繁的检测,节省CPU资源的消耗。
  • 临界区不是内核对象,而是系统提供的一种数据结构,程序中可以声明一个该类型的变量,之后用它来实现对资源的互斥访问。当欲访问某一临界资源时,先将该临界区加锁(若临界区不空闲则等待),用完该资源后,将临界区...
  • cuda临界区问题的总结

    2021-01-28 10:21:23
    gpu在多线程处理数据的时候,可能会同时访问到同一个数据,这就会出现临界区的处理问题。 cuda提供了多个atmoic原子操作,但是只支持一些基础的数据类型,不能自定义结构体。对于多种数据的同步操作,就可能受到影响...
  • 总体呈现:为了保护共享资源,不让多个进程同时访问这个共享资源,即阻止多个进程同时进入访问这些资源的代码段,这个代码段称为临界区(也称为管程),这种一次只允许一个进程访问的资源称为临界资源。 从实际应用的角度...
  • 还没啥规律~","这段代码怎么看也没问题呀~" 所以对比看来RTOS确实会带来编程上的难度~ 3 临界区 既然有难度,我们就要解决,把不确定性部分通过一些手段来变得确定,而造成这些不确定因素的动力是什么呢?...
  • 临界区的引出 从上篇文章中,我们了解到了信号量的概念。信号量的数值表达的语义用来控制进程的走和停,因此,信号量的数值是非常重要的,信号量的数值吧必须和信号量的语义相一致,才能正确地决定进程的同步...
  • 我们可以使用synchronized机制实现线程同步,通过保证“临界区”的访问顺序来保证共享资源状态的正确性。然而,更多情况是我们不仅需要获得对“临界区”的访问,在获得访问权限后也要判断更多的条件来确定是否要做出...
  • 首先,你的这句话“那么保证try/catch块中的临界区代码不要不抛出异常就可以了”...“不要因为异常的抛出而跳出了临界区,致使在临界区代码结束之前抛出了异常,finally子句释放锁,使对象可能处于种受损状态”“CAUT...
  • 临界区是指一个小代码段,在代码执行前能够独占某些资源的访问权;需要注意的是,系统仍然能够控制线程的运行,去安排其他线程。不过,在线程退出临界区之前,系统不会调度其他试图访问相同资源的线程。来看一段代码...
  • 不确定性: 如果一个操作是非原子操作, 那么...前进原则: 如果一个进程想要进入临界区, 那么在有限时间内一定会等到 临界区的实现: 方法1:禁用硬件中断: 在进入临界区之前屏蔽中断, 执行完临界区代码后再恢复 缺点:.
  • 实际上,这些问题只有在或多线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多线程读取相同的资源就是安全的。多线程同时执行下面的代码可能会出错:publicclassCounter{protecte...
  • 临界区临界区临界区是指进程中的一段需要访问共享资源并且另一个进程处于相应代码区域时便不会被执行的代码区域互斥:当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且访问任何相同的共享...
  • (1)信号量就是一个整型变量,用来记录和进程同步有关的重要信息; (2)能让进程阻塞睡眠在这个信号量上; (3)需要同步的进程通过操作(加 1 和减 1)信号量实现进程的阻塞和唤醒,即进程间的同步。因此,信号量...
  • 只要多个进程同时对同一个资源访问,就很可能互相干扰,这种干扰通常称为静态条件 原子操作 如果能够保证获取并更新计数器的值是一个原子操作的话,那么竞态条件就不会发生 执行过程中不能被中断的操作称为原子操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,013
精华内容 37,605
关键字:

临界区是一个什么