国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Locker 協(xié)程鎖

Locker是一種內(nèi)存鎖,用于協(xié)程間的同步,常用來(lái)在協(xié)程中排隊(duì)訪(fǎng)問(wèn)某種臨界資源,例如某個(gè)數(shù)據(jù)庫(kù)組件沒(méi)有做連接池,則可以通過(guò)Locker來(lái)排隊(duì)使用該組件,避免因?yàn)槎鄠€(gè)協(xié)程同時(shí)使用同一個(gè)連接資源導(dǎo)致數(shù)據(jù)異常。

提示
此特性需要 workerman>=5.1.0

注意

  • Locker支持Swoole/Swow/Fiber/Select/Event驅(qū)動(dòng)
  • Locker是用于同一個(gè)進(jìn)程的不同協(xié)程間排隊(duì)互斥訪(fǎng)問(wèn)某個(gè)資源的,進(jìn)程與進(jìn)程間互不影響
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Locker;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8001');

$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class

$worker->onMessage = function (TcpConnection $connection, Request $request) {
    static $redis;
    if (!$redis) {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
    }
    // 避免多個(gè)協(xié)程同時(shí)使用同一個(gè)連接,發(fā)生類(lèi)似 "Socket#10 has already been bound to another coroutine" 錯(cuò)誤
    Locker::lock('redis');
    $time = $redis->time();
    Locker::unlock('redis');
    $connection->send(json_encode($time));
};

Worker::runAll();

接口說(shuō)明

interface LockerInterface
{
    /**
     * 加鎖
     */
    public static function lock(string $key): bool

    /**
     * 解鎖
     */
    public static function unlock(string $key): bool
}
編輯于2025-02-06 19:10:04 完善本頁(yè) +發(fā)起討論
贊助商