dot Redis 8 来了——而且是开源的

了解更多

6.3 计数信号量

返回主页

6.3 计数信号量

计数信号量 是一种锁,允许您将可以并发访问资源的进程数量限制为某个固定数量。您可以将我们刚刚创建的锁视为限制为 1 的计数信号量。通常,计数信号量用于限制可以一次使用的资源量。

与其他类型的锁一样,计数信号量需要获取和释放。首先,我们获取信号量,然后执行我们的操作,然后释放它。但是,如果我们通常在锁不可用时等待锁,那么如果信号量不能立即使用,通常会立即失败。例如,假设我们希望允许五个进程获取信号量。如果第六个进程尝试获取它,我们希望该调用尽早失败并报告资源繁忙。

我们将以与第 6.2 节中分布式锁定的方式类似的方式完成本节。我们将一块一块地构建一个计数信号量,直到我们得到一个完整且正确的计数信号量。

让我们看一个 Fake Game Company 的例子。随着其市场的持续增长,Fake Game Company 收到了来自用户的请求,希望从游戏外部访问有关市场的信息,以便他们可以在不登录游戏的情况下买卖物品。执行这些操作的 API 已经编写完成,但我们的工作是构建一种机制,限制每个帐户一次从不超过五个进程访问市场。

在我们构建了我们的计数信号量之后,我们要确保将传入的 API 调用包装在一个正确的 acquire_semaphore()release_semaphore() 对中。