Example
<?php
declare(ticks=1);
require_once __DIR__ . '/../../../vendor/autoload.php';
use vennv\vapm\CoroutineGen;
use vennv\vapm\AwaitGroup;
use vennv\vapm\Mutex;
$awaitGroup = new AwaitGroup();
$mutex = new Mutex();
$arr = []; // This is shared between all coroutines
function addText(array &$arr, string $text)
{
yield $arr[] = $text;
}
$awaitGroup->add(2); // We expect 2 coroutines to run
// This is coroutine A
CoroutineGen::runNonBlocking(function () use (&$arr, &$mutex, &$awaitGroup) {
yield from $mutex->lock();
for ($i = 0; $i < 5; $i++) {
yield from addText($arr, "A");
}
yield from $awaitGroup->done();
yield from $mutex->unlock();
});
// This is coroutine B
CoroutineGen::runNonBlocking(function () use (&$arr, &$mutex, &$awaitGroup) {
yield from $mutex->lock();
for ($i = 0; $i < 5; $i++) {
yield from addText($arr, "B");
}
yield from $awaitGroup->done();
yield from $mutex->unlock();
});
$awaitGroup->wait();
var_dump($arr);Output:
Last updated