phpday 2022

pht\Queue::lock

(PECL pht >= 0.0.1)

pht\Queue::lockПолучает блокировку мьютекса очереди

Описание

public pht\Queue::lock(): void

Метод получит блокировку мьютекса, связанную с очередью. Блокировка мьютекса всегда должна быть получена при манипулировании очередью, если она используется несколькими потоками.

Блокировки мьютексов структур данных межпоточного взаимодействия (ITC) не реентерабельны. Попытка повторно получить уже полученную блокировку мьютекса тем же потоком приведёт к взаимной блокировке.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Ничего не возвращает.

Примеры

Пример #1 Блокировка мьютекса очереди

<?php

use pht\{ThreadQueue};

$thread = new Thread();
$queue = new Queue();

$thread->addFunctionTask(function ($queue) {
    
$queue->lock();
    
$queue->push(1);
    
$queue->unlock();
}, 
$queue);

$thread->start();

// $queue сейчас используется несколькими потоками
$queue->lock();
$queue->push(1);
$queue->unlock();

$thread->join();

// $queue сейчас используется только в этом потоке, поэтому нет необходимости блокировать его
while ($queue->size()) {
    
var_dump($queue->pop());
}

Результат выполнения данного примера:

int(1)
int(1)

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top