信号量:在一个线程中获取的许可可以从另一个线程中释放 - 例如

时间:2015-12-24 19:03:27

标签: java multithreading concurrency

我正在考虑一个例子,即在一个线程中获得并从另一个线程中释放的声明'。

我对信号量的理解是,它保留了一套许可证。线程应该在越过临界区之前获取许可,然后Permits减1。一旦线程完成了关键部分,它就会释放许可证,许可证会增加1 例子:
1. ATM机,带有保安人员,根据机器的可用性允许人员。许多机器都是许多机器。一个客户购买一台ATM机,然后在完成后将其释放 2.银行柜台,如果柜台有空,通知客户,然后他/她可以去柜台与行政人员交谈并完成工作。许多柜台都有很多许可证。

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

1 个答案:

答案 0 :(得分:1)

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

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

当收到数据库回复处理它时,让任何线程碰巧运行更有意义。然后该线程可以释放连接,无论在连接的所有权被执行时正在运行什么线程。

对这个模型有点抽象思考:
1.线程拥有资源的所有权 2.线程使用资源 3.线程释放资源的所有权。

这很好,但如果第2步更好地由多个线程处理呢?然后,确保步骤3由与步骤1相同的线程执行是额外的努力。