您的位置  > 互联网

二元期权:临界区和互斥量的区别在于什么?

与锁定线程同步

为了避免多线程同时读取和写入相同数据的不可预见的后果,我们需要同步每个线程对相同数据的访问。同步意味着当一个线程访问数据时,不允许其他线程访问相同的数据。通过这种方式,对数据的访问是原子化的。就像洗手间一样,当一个人方便时,其他人不能进入洗手间。

最常见的同步方法是锁定,这是一种非强制机制,其中每个线程在访问数据或资源之前首先尝试获取锁,然后在访问结束后释放锁。当尝试获取已被占用的锁时,线程将等待该锁再次可用。

相互排除

互斥锁是一个简单的锁,具有两种状态,已占用和未占用。它适用于只能由单个线程独占访问的资源。当互斥锁处于非占用状态时,获取互斥锁的第一个线程获取锁并将互斥锁置于非占用状态,之后获取互斥锁的所有其他线程将等待锁被释放。

信号

二进制信号量和互斥锁非常相似。但是,信号量可以被整个系统的任何线程拾取和释放,这两者略有不同。也就是说,相同的信号量可以被一个线程拾取并由另一个线程释放。互斥锁需要哪个线程来获取它,以及需要哪个线程来释放它。

在多变量信号量的情况下,允许多个线程并发访问的资源。初始值为 n 的信号量允许 n 个线程并发访问。当 m 得到信号量时,n 会减去 m,当它被释放时,n 会加 m,n 小于或等于 0,即等待。

临界区

临界区是一种比互斥锁更严格的同步方式。关键区域和互斥锁之间的区别在于,互斥锁在系统中的任何进程中都是可见的,也就是说,一个进程创建一个互斥锁,另一个进程尝试获取锁是合法的,但是,关键区域的范围仅限于当前进程,其他进程无法获取锁。此外,临界区域和互斥锁具有相同的性质。

读/写锁

对于一些读写过程,使用其他锁的效率会非常低,因此读写锁应运而生。读/写锁支持多个线程同时读取,但只有一个线程可以写入。对于同一锁,可以通过两种方式获取读/写锁,共享或独占。下表说明如何获取

信息

条件变量

条件变量就像栅栏一样,是一种同步手段。对于条件变量,线程可以执行两种操作,首先线程可以等待条件变量,一个条件变量可以由多个线程等待。其次,线程可以唤醒条件变量,此时等待条件变量的一个或所有线程将被唤醒并继续支持。也就是说,使用条件变量允许许多线程一起等待事件发生,当事件发生时,所有线程可以一起恢复执行。