---
title: IORecursiveLockTryLock
framework: kernel
role: symbol
role_heading: Function
path: kernel/1552993-iorecursivelocktrylock
---

# IORecursiveLockTryLock

Attempt to lock a recursive lock.

## Declaration

```occ
bool IORecursiveLockTryLock(struct IORecursiveLock *lock);
```

```occ
boolean_t IORecursiveLockTryLock(IORecursiveLock *lock);
```

## Parameters

- `lock`: Pointer to the allocated lock.

## Return Value

Return Value True if the lock is now locked by the caller, otherwise false.

## Discussion

Discussion Lock the lock if it is currently unlocked, or held by the calling thread, and return true. If the lock is held by another thread, return false. Successful calls to IORecursiveLockTryLock should be balanced with calls to IORecursiveLockUnlock.

## See Also

### Recursive Locks

- [IORecursiveLockAlloc](kernel/1553013-iorecursivelockalloc.md)
- [IORecursiveLockFree](kernel/1553031-iorecursivelockfree.md)
- [IORecursiveLockGetMachLock](kernel/1552988-iorecursivelockgetmachlock.md)
- [IORecursiveLockHaveLock](kernel/1552995-iorecursivelockhavelock.md)
- [IORecursiveLockLock](kernel/1553020-iorecursivelocklock.md)
- [IORecursiveLockSleep](kernel/1553001-iorecursivelocksleep.md)
- [IORecursiveLockSleepDeadline](kernel/1552986-iorecursivelocksleepdeadline.md)
- [IORecursiveLockUnlock](kernel/1553032-iorecursivelockunlock.md)
- [IORecursiveLockWakeup](kernel/1553014-iorecursivelockwakeup.md)
