swoole_lock提供的trylock_read用于非阻塞的读,其原型如下:
$lock->trylock_read();
调用会立即返回,必须检测返回值以确定是否拿到了锁。
下面我们分析下其流程。
static PHP_METHOD(swoole_lock, trylock_read)
{
swLock *lock = swoole_get_object(getThis());
if (lock->trylock_rd == NULL)
{
swoole_php_error(E_WARNING, "lock[type=%d] can't use trylock_read", lock->type);
RETURN_FALSE;
}
SW_LOCK_CHECK_RETURN(lock->trylock_rd(lock));
}
1、文件锁
static int swFileLock_trylock_rd(swLock *lock)
{
lock->object.filelock.lock_t.l_type = F_RDLCK;
return fcntl(lock->object.filelock.fd, F_SETLK, &lock->object.filelock);
}