---
name: "pthread_rwlock_wrlock"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd", "macos"]
url: "https://new.carta.tech/pthread_rwlock_trywrlock"
---

# pthread\_rwlock\_wrlock(3)

acquire a read/write lock for writing

Part of [pthread\_rwlock\_trywrlock(3)](/pthread_rwlock_trywrlock/3.md).

## NAME

**pthread\_rwlock\_wrlock**, **pthread\_rwlock\_trywrlock** – acquire a read/write lock for writing

## LIBRARY

POSIX Threads Library (libpthread, -lpthread)

## SYNOPSIS

**#include \<pthread.h\>**

*int*\

**pthread\_rwlock\_wrlock**(*pthread\_rwlock\_t \*lock*);

*int*\

**pthread\_rwlock\_trywrlock**(*pthread\_rwlock\_t \*lock*);

## DESCRIPTION

The **pthread\_rwlock\_wrlock**() function blocks until a write lock can be acquired against *lock*. The **pthread\_rwlock\_trywrlock**() function performs the same action, but does not block if the lock cannot be immediately obtained.

The results are undefined if the calling thread already holds the lock at the time the call is made.

## IMPLEMENTATION NOTES

To prevent writer starvation, writers are favored over readers.

## RETURN VALUES

If successful, the **pthread\_rwlock\_wrlock**() and **pthread\_rwlock\_trywrlock**() functions will return zero. Otherwise an error number will be returned to indicate the error.

## ERRORS

The **pthread\_rwlock\_trywrlock**() function will fail if:

- \[EBUSY\]

  The calling thread is not able to acquire the lock without blocking.

The **pthread\_rwlock\_wrlock**() and **pthread\_rwlock\_trywrlock**() functions may fail if:

- \[EDEADLK\]

  The calling thread already owns the read/write lock (for reading or writing).

- \[EINVAL\]

  The value specified by *lock* is invalid.

- \[ENOMEM\]

  Insufficient memory exists to initialize the lock (applies to statically initialized locks only).

## SEE ALSO

[pthread\_rwlock\_init(3)](/pthread_rwlock_init/3.md), [pthread\_rwlock\_rdlock(3)](/pthread_rwlock_rdlock/3.md), [pthread\_rwlock\_tryrdlock(3)](/pthread_rwlock_tryrdlock/3.md), [pthread\_rwlock\_unlock(3)](/pthread_rwlock_unlock/3.md)

## STANDARDS

The **pthread\_rwlock\_wrlock**() and **pthread\_rwlock\_trywrlock**() functions are expected to conform to Version 2 of the Single UNIX Specification (“SUSv2”).

## HISTORY

The **pthread\_rwlock\_wrlock**() function first appeared in FreeBSD 3.0.
