gpt4 book ai didi

java - 信号量 : Permit acquired in one thread can be released from another thread - Example

转载 作者:行者123 更新时间:2023-11-30 07:42:33 25 4
gpt4 key购买 nike

我正在尝试考虑“在一个线程中获取许可并从另一个线程中释放”语句的示例。

我对信号量的理解是,它维护着一组许可证。线程在遍历临界区之前应该获得许可,然后将许可减一。一旦线程完成了关键部分,它就会释放许可证,并且许可证会增加 1。
示例:
1. ATM 机,配有保安人员,根据机器的可用性允许人员进入。许可证数量与机器数量一样多。一位客户购买了一台 ATM 机,然后在完成后将其释放。
2. 银行的柜台,如果柜台有空,客户会收到通知,然后他/她可以去与柜台的主管交谈并完成工作。有多少柜台就有多少许可证。

那么,一个线程获取的许可被其他线程释放的简单场景/示例是什么?

最佳答案

您的 ATM 示例是一个很好的示例。假设客户从一扇门进入,从另一扇门出去,每扇门都由一个线程管理。

或者,举一个更典型的例子,假设您只有有限数量的数据库连接。线程必须等待开始处理请求,直到获得与数据库的连接。然后该线程向数据库发送请求。但在收到数据库回复之前,您无法取得任何进一步的进展。强制线程等待从数据库获取回复是否有意义,以便获得数据库连接所有权的同一线程可以释放它?

在收到数据库回复时让任何正在运行的线程处理它更有意义。然后该线程可以释放连接,无论取得连接所有权时哪个线程正在运行。

抽象地思考一下这个模型:
1. 线程取得资源的所有权。
2.线程使用资源。
3.线程释放资源所有权。

这很好,但是如果第 2 步最好由多个线程处理怎么办?然后,确保步骤 3 由与步骤 1 相同的线程执行就变成了额外的工作。

关于java - 信号量 : Permit acquired in one thread can be released from another thread - Example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com