临界区和互斥量的区别

一:进程的互斥与进程互斥的访问临界区的区别

请参阅:

1、不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区(Critical Section)。

每个进程中访问临界资源的那段程序称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。

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

进程进入临界区的调度原则是: ①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()和LeaveCriticalSection()函数去标识和释放一个临界区。所用到的CRITICAL_SECTION结构对象必须经过InitializeCriticalSection()的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。

二:何谓临界区?下面给出的两个进程互斥的算法是安全的吗?为什么

临界区就是只有一个线程能进去的区域,进程互斥可以说是安全的,因为不同的进程不共享内存。 但是也有用到互斥的地方,比如文件锁, 消息队列等

三:信号量,临界区,互斥,原子操作,消息,事件,哪种效率最高?

在Windows中,临界区的效率最高。原因是它不用陷入内核,在用户态执行信号量,互斥,事件都是系统内核对象,效率比临界区低,但是有更好的可操作性。上面的几个东西都是为了实现原子操作用的。以上是Windows核心编程里实际测试过的

四:Mutex和信号量的区别

Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个,一般的用法是用于串行化对临界区代码的访问,保证这段代码不会被并行的运行。

Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。

对于N=1的情况,称为binary semaphore,一般的用法是,用于限制对于某一资源的同时访问。在有的系统中Binary semaphore与Mutex是没有差异的

五:如何用c语言自己实现一个互斥体或临界区

互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex))。互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section)。 每个进程中访问临界资源的那段代码称为临界区(Critical Section)

六:关于操作系统临界区的互斥方法的软件实现问题求解。

While(turn!=0);

注意while后面有个分号,也就是说当turn不为0时,一直循环等待,直到turn变为0后,才跳出循环进入临界区。

扫一扫手机访问

发表评论