Semaphores fully implemented
This commit is contained in:
parent
612cfc2035
commit
4652e464b9
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
/vendor/
|
||||
/composer.lock
|
||||
/doc
|
||||
|
@ -8,18 +8,25 @@ use NoccyLabs\Ipc\Key\KeyInterface;
|
||||
|
||||
class Semaphore
|
||||
{
|
||||
public function __construct(KeyInterface $key, int $max)
|
||||
protected $resource;
|
||||
|
||||
public function __construct(KeyInterface $key, int $max, $perm = 0660, $autorelease = 1)
|
||||
{
|
||||
|
||||
$this->resource = sem_get($key->getKey(), $max, $perm, $autorelease);
|
||||
}
|
||||
|
||||
public function acquire(float $timeout)
|
||||
public function destroy()
|
||||
{
|
||||
|
||||
sem_remove($this->resource);
|
||||
}
|
||||
|
||||
public function release()
|
||||
public function acquire(float $timeout = 0):bool
|
||||
{
|
||||
return sem_acquire($this->resource, true);
|
||||
}
|
||||
|
||||
public function release():bool
|
||||
{
|
||||
return sem_release($this->resource);
|
||||
}
|
||||
}
|
27
tests/Sem/SemaphoreTest.php
Normal file
27
tests/Sem/SemaphoreTest.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\Ipc\Sem;
|
||||
|
||||
use NoccyLabs\Ipc\Key\FileKey;
|
||||
|
||||
|
||||
|
||||
class SemaphoreTest extends \PhpUnit\Framework\TestCase
|
||||
{
|
||||
|
||||
public function testCreatingAndAquiringSemaphore()
|
||||
{
|
||||
$key = new FileKey(__FILE__);
|
||||
$sem = new Semaphore($key, 2);
|
||||
|
||||
$this->assertTrue($sem->acquire());
|
||||
$this->assertTrue($sem->acquire());
|
||||
$this->assertFalse($sem->acquire());
|
||||
$this->assertTrue($sem->release());
|
||||
$this->assertTrue($sem->acquire());
|
||||
$this->assertFalse($sem->acquire());
|
||||
$this->assertTrue($sem->release());
|
||||
$this->assertTrue($sem->release());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user