Hack implementation of reactphp-muxted
by WyriHaximus.
To install via Composer, use the command below :
composer require azjezz/mutex
This package provides two things:
- An interface for
mutex
locking - A in-memory implementation of that interface
use namespace AzJezz\Mutex;
use namespace HH\Asio;
require 'vendor/autoload.hack';
<<__EntryPoint>>
async function main(): Awaitable<void> {
Facebook\AutoloadMap\initialize();
$mutex = new Mutex\Memory();
$jobs = vec[
foo($mutex), // first to acquire the lock
foo($mutex), // won't be able to acquire the lock
foo($mutex), // same
];
foreach($jobs as $job) {
await $job;
}
}
async function foo(
Mutex\MutexInterface $mutex
): Awaitable<void> {
$lock = await $mutex->acquire('foo');
if ($lock is nonnull) {
echo "doing things \n";
await Asio\usleep(10000000);
echo "finished my job, releasing the lock \n";
await $mutex->release($lock);
return;
}
echo "someone else have requested the 'foo' lock\n";
}
The Mutex Project is open-sourced software licensed under the MIT-licensed.