信号量组件
编辑本页信号量组件
信号量组件进行管理信号量,一种提供对共享资源的独占访问的机制。
安装
1
$作曲家需要symfony/信号量ob娱乐下载
请注意
如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php
文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。
使用
在计算机科学中,信号量是一种变量或抽象数据类型,用于控制并发系统(如多任务操作系统)中多个进程对公共资源的访问。主要的区别是锁信号量允许多个进程访问资源,而锁只允许一个进程访问资源。
属性创建信号量SemaphoreFactory类,这又需要另一个类来管理存储:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\信号量\SemaphoreFactory;使用ob娱乐下载\组件\信号量\商店\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 ();}
如果无法获取信号量,则该方法返回假
.的获得()
方法可以安全地重复调用,即使已经获取了信号量。
请注意
与其他实现不同的是,Semaphore组件即使在为相同资源创建信号量实例时也能区分它们。如果一个信号量必须被多个服务使用,那么它们应该共享同一个信号量信号量
实例返回的SemaphoreFactory: createSemaphore
方法。
提示
如果您不显式地释放信号量,它将在实例销毁时自动释放。在某些情况下,跨多个请求锁定一个资源可能很有用。属性的第五个参数,可禁用自动释放行为createSemaphore()可以
方法假
.
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。