我在 Erlang 中创建了一个连接池进程,它有子进程(每个都是一个连接)。连接池进程(主管)需要保存所有子子进程的状态,例如指示子进程是否可供请求者租用的标志。此状态存储在 ETS 表中。
泳池大师:
- 连接过程1
- 连接过程2
- 连接过程3
当客户端请求到 POOL-MASTER 的连接时,它必须通过查看 ETS 并获取状态来找出可用的连接进程。这个阶段被称为“ get-lease ”。然后状态被更新。类似地,当客户端将连接返回到池时,它使用“ return-lease ”函数将项目标记为可供下一个客户端使用。
我想让上面的函数“ get-lease和return-lease ”是线程安全的。换句话说,我想确保没有客户端同时使用这些功能,否则连接的状态可能会混淆(两个客户端获得相同的连接)。在 java 中,将使用同步方法来实现此目的。
erlang 中有什么可以实现的吗?例如 ETS 表上的某种锁定机制,然后重新锁定?或者是否应该创建一个处理要锁定/解锁的特定功能并将消息发送到该进程的单个进程(假设消息传递是单线程的)?