信号量组件
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
信号量组件
信号量组件管理信号量,一个机制来提供独家访问共享资源。
5.2
信号量组件是在Symfony 5.2中引入的。欧宝娱乐app下载地址
安装
1
美元作曲家需要symfony /信号量欧宝娱乐app下载地址
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求欧宝娱乐app下载地址供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
使用
在计算机科学中,一个信号量是一个变量或抽象数据类型用来控制访问公共资源等多个进程并发系统中一个多任务的操作系统。的主要区别锁是信号量允许多个进程访问资源,而锁只允许一个进程。
创建信号量SemaphoreFactory类,这又需要另一个类来管理存储:
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\信号量\SemaphoreFactory;使用欧宝娱乐app下载地址\组件\信号量\商店\RedisStore;美元复述,=新复述();美元复述,- >连接(“172.17.0.2”);美元商店=新RedisStore (美元复述,);美元工厂=新SemaphoreFactory (美元商店);
通过调用创建信号量createSemaphore()可以方法。它的第一个参数是一个任意字符串,代表了锁定的资源。它的第二个参数是允许的最大进程数量。然后,调用获得()方法将尝试获得信号量:
1 2 3 4 5 6 7 8 9
/ /……美元信号量=美元工厂- >createSemaphore(可以“pdf-invoice-generation”,2);如果(美元信号量- >获得()){/ /资源“pdf-invoice-generation”是锁着的。/ /在这里您可以安全地计算并生成发票。美元信号量- >release ();}
如果不能获得信号量,方法返回假
。的获得()
方法可以安全地调用多次,即使信号已经收购了。
请注意
与其他实现,即使他们是创建信号量组件区分信号实例相同的资源。如果一个信号量使用多个服务,他们应该共享相同的信号量
返回的实例SemaphoreFactory: createSemaphore
方法。
提示
如果不显式地释放信号量,它将自动释放实例的破坏。在某些情况下,它可以帮助锁定资源跨多个请求。禁用自动释放行为,设置的第五个参数createSemaphore()可以
方法假
。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。