semaphore = $this->createSemaphore(1); $thread1 = new Thread(function (SemaphoreInterface $semaphore) { $lock = (yield $semaphore->acquire()); usleep(1e5); $lock->release(); yield 0; }, $this->semaphore); $thread2 = new Thread(function (SemaphoreInterface $semaphore) { $lock = (yield $semaphore->acquire()); usleep(1e5); $lock->release(); yield 1; }, $this->semaphore); $start = microtime(true); $thread1->start(); $thread2->start(); yield $thread1->join(); yield $thread2->join(); $this->assertGreaterThan(1, microtime(true) - $start); }); Loop\run(); } }