信号量与互斥
信号量是一种数据结构,用于确保在并行编程环境中多个进程不会同时访问一个公共资源或一个关键部分。信号量用于避免死锁和争用情况。互斥对象(互斥对象)也用于避免多个并发进程同时访问一个公共资源。
什么是信号量?
信号量是一种数据结构,用于为关键部分提供互斥。信号量主要支持wait(历史上称为P)和signal(历史上称为V)两种操作。wait操作阻塞一个进程,直到信号量打开,信号操作允许另一个进程(线程)进入。每个信号量都与一个等待进程的队列相关联。当等待操作被线程调用时,如果信号量是打开的,线程可以继续。如果等待操作被线程调用时信号量关闭,则线程被阻塞,它必须在队列中等待。signal操作打开一个信号量,如果队列中已经有线程在等待,则允许该进程继续,如果队列中没有等待的线程,则会为下一个线程记住该信号。有两种类型的信号量称为互斥信号量和计数信号量。互斥信号量允许对一个资源进行单一访问,计数信号量允许多个线程访问一个资源(该资源有多个可用单元)。
什么是互斥体?
当计算机应用程序启动时,它将创建一个互斥体并将其附加到资源上。当资源被线程使用时,它被锁定,其他线程无法使用它。如果另一个线程想要使用相同的资源,它将必须发出请求。然后将线程放入队列中,直到第一个线程完成。当第一个线程使用完资源后,锁将被移除,队列中等待的线程可以访问该资源。如果队列中有多个线程在等待,它们将被轮流授予访问权限。实际上,当互斥体在多个线程之间交替访问一个资源时,当多个线程同时消耗一个资源时,它将是可见的。但是在内部只有一个线程在给定的时间访问资源。
信号量和互斥有什么区别?