mutex — Использование блокировок Swoole в переполнении стека

Я работаю над новым проектом, который должен быть реализован расширением Swoole.

Вот документы для замков Swoole:
https://www.swoole.co.uk/docs/modules/swoole-lock

Вот поддерживаемые типы блокировки:

SWOOLE_FILELOCK: file lock
SWOOLE_RWLOCK: read write lock
SWOOLE_SEM: Linux semaphore
SWOOLE_MUTEX: Mutex
SWOOLE_SPINLOCK: spin lock

Вот мои вопросы:

  1. Почему работает только SWOOLE_SPINLOCK, а все остальные блокировки возвращают false при попытке получить блокировку?

  2. Как заблокировать чтение или запись и как снять блокировку чтения или записи в режиме SWOOLE_RWLOCK? В документах говорится только о получении блокировок чтения (что, как я сказал в # 1, всегда возвращает false).


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

SWOOLE_RWLOCK:

$lock_1 = new swoole_lock(1);
$lock_2 = new swoole_lock(1);

var_dump($lock_1->lock_read());
// result: bool(false)

var_dump($lock_2->lock());
// result: bool(false)

SWOOLE_MUTEX:

$lock = new swoole_lock(3);

var_dump($lock->lock());
// result: bool(true)
// It's funny that this lock was not working when I asked the question and now it's working!

SWOOLE_SEM:

$lock = new swoole_lock(4);

var_dump($lock->lock());
// Result: Assertion failed: (key != 0), function swSem_create, file /Users/***USER***/Desktop/pecl/swoole-src/src/lock/Semaphore.c, line 27. Abort trap: 6

SWOOLE_SEM:

$lock = new swoole_lock(5);

var_dump($lock->lock());
// result: bool(true)

Я не проверял режим SWOOLE_FILELOCK, так как он пытается заблокировать файл на диске, что не подходит для этого проекта.

Кроме того, кажется, что все эти 5 констант не определены, поэтому я использовал их соответствующие целочисленные значения в приведенных выше примерах.


Я использую последнюю версию PHP 7.2.4 & Swoole 2.1.1 на macOS Сьерра.
Вот phpinfo ():

swoole

swoole support => enabled
Version => 2.1.1
Author => tianfeng.han[email: [email protected]]
coroutine => enabled
kqueue => enabled
rwlock => enabled
async redis client => enabled
async http/websocket client => enabled
pcre => enabled
zlib => enabled
mysqlnd => enabled

Команда phpinfo (php -i) configure (php скомпилирован из исходного кода):

Configure Command =>  './configure'  '--prefix=/usr/local/php' '--with-bz2' '--with-zlib' '--enable-zip' '--disable-cgi' '--enable-soap' '--with-openssl=/usr/local/Cellar/openssl/1.0.2o_1' '--with-libedit=/usr/local/Cellar/libedit/20170329-3.1' '--with-curl' '--enable-ftp' '--enable-mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-sockets' '--enable-pcntl' '--with-pspell' '--with-gd' '--enable-exif' '--with-jpeg-dir=/usr/local/Cellar/jpeg/9c' '--with-png-dir=/usr/local/Cellar/libpng/1.6.34' '--with-vpx-dir=/usr/local/Cellar/libvpx/1.6.1' '--with-freetype-dir=/usr/local/Cellar/freetype/2.9' '--with-zlib-dir=/usr/local/Cellar/zlib/1.2.11' '--with-xsl' '--enable-bcmath' '--enable-mbstring' '--enable-calendar' '--enable-simplexml' '--enable-json' '--enable-hash' '--enable-session' '--enable-xml' '--enable-wddx' '--enable-opcache' '--with-pcre-regex' '--with-config-file-path=/Users/***USER***/localhost/Server/php-configs' '--with-config-file-scan-dir=/Users/***USER***/localhost/Server/php-configs/extensions' '--enable-cli' '--enable-maintainer-zts' '--with-tsrm-pthreads' '--enable-debug' '--enable-fpm' '--with-fpm-user=www-data' '--with-fpm-group=www-data' '--with-imap-ssl' '--with-pear' '--with-xmlrpc' '--with-ds' '--with-igbinary' '--with-imagick' '--with-memcached' '--with-mustache' '--with-swoole'

Команда swoole configure (swoole скомпилирован из источника):

./configure --enable-debug --enable-openssl=/usr/local/Cellar/openssl/1.0.2o_1/include --enable-async-redis --enable-mysqlnd

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]