进程在等待多久才能获取锁并进入临界区,取决于当前系统的负载情况、锁的等待队列长度等因素。一般来说, *** 作系统会为每个锁维护一个等待队列,进程在获取锁失败时会进入该队列等待,直到锁被释放并轮到该进程获取锁为止。如果系统中同时有大量进程需要访问临界区,那么等待时间可能会很长,反之则会很短。
因此,进程在允许访问临界区之前必须等待多久是没有固定的限制的,取决于当前系统的负载和锁的等待队列情况。为了提高系统的响应速度和吞吐量,可以采用一些优化策略,例如使用读写锁、减少临界区的大小、避免长时间占用锁等。
临界状态是什么意思如下:
临界是指由某一种状态或物理量转变为另一种状态或物理量的最低转化条件;或者由一种状态或物理量转变为另一种状态或物理量。
1、每种物质都有一个特定的温度,在这个温度以上,无论怎样增大压强,气态物质不会液化,这个温度就是临界温度。
2、通常把在临界温度以上的气态物质叫做气体,把在临界温度以下的气态物质叫做汽体。
进程进入临界区的调度原则是:
1、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
2、任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
其他问题:
在使用临界区时,一般不允许其运行时间过长,只要进入临界区的线程还没有离开,其他所有试图进入此临界区的线程都会被挂起而进入到等待状态,并会在一定程度上影响程序的运行性能。尤其需要注意的是不要将等待用户输入或是其他一些外界干预的 *** 作包含到临界区。
如果进入了临界区却一直没有释放,同样也会引起其他线程的长时间等待。换句话说,在执行了EnterCriticalSection()语句进入临界区后无论发生什么,必须确保与之匹配的
LeaveCriticalSection()都能够被执行到。可以通过添加结构化异常处理代码来确保LeaveCriticalSection()语句的执行。虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)