PHP.mk документација

Swoole\Coroutine\Lock

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

class.swoole-coroutine-lock.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека class.swoole-coroutine-lock.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Swoole\Coroutine\Lock

Референца за `class.swoole-coroutine-lock.php` со подобрена типографија и навигација.

class.swoole-coroutine-lock.php

The Swoole\Coroutine\Lock class

(Нема достапни информации за верзијата, можеби е само во Git)

Вовед

Swoole 6.0.1 introduced a coroutine lock that supports inter-process and inter-thread sharing. This lock is designed with non-blocking behavior and enables efficient coroutine synchronization in multi-process and multi-thread environments.

When compiled with the --enable-iouring option and the Linux kernel supports the io_uring futex feature, Swoole's coroutine lock implements synchronization using io_uring futex. In this case, coroutines wait for lock wakeups using an efficient queuing mechanism, significantly improving performance.

Без io_uring futex, the coroutine lock falls back to an exponential backoff sleep mechanism, where the wait time increases by 2^n milliseconds (n being the number of failures) after each failed attempt to acquire the lock. While this approach avoids busy waiting, it introduces additional CPU scheduling overhead and latency.

The coroutine lock is reentrant, allowing the currently holding coroutine to safely perform multiple lock operations.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

Do not create locks in callback functions like onReceive, as this will cause continuous memory growth and lead to memory leaks.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

Locking and unlocking must be performed in the same coroutine, otherwise it will break static conditions.

Синопсис на класата

class Swoole\Coroutine\Lock {
/* Методи */
public __construct(): void
public lock(): bool
public trylock(): bool
public unlock(): bool
}

Примери

Пример #1 Основна употреба

<?php
use Swoole\Coroutine\Lock;
use
Swoole\Coroutine\WaitGroup;
use function
Swoole\Coroutine\go;
use function
Swoole\Coroutine\run;

$lock = new Lock();
$waitGroup = new WaitGroup();

run(function() use ($lock, $waitGroup) {
go(function() use ($lock, $waitGroup) {
$waitGroup->add();
$lock->lock();
sleep(1);
$lock->unlock();
$waitGroup->done();
});

go(function() use ($lock, $waitGroup) {
$waitGroup->add();
$lock->lock(); // Wait for the holding coroutine to unlock
sleep(1);
$lock->unlock();
$waitGroup->done();
});

echo
'Lock does not block the process';
$waitGroup->wait();
});

Содржина

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.