---
name: "pthread_rwlockattr_setkind_np"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/pthread_rwlockattr_setkind_np"
---

# pthread\_rwlockattr\_setkind\_np(3)

set/get the read-write lock kind of the thread read-write lock attribute object

## NAME

pthread\_rwlockattr\_setkind\_np, pthread\_rwlockattr\_getkind\_np - set/get the read-write lock kind of the thread read-write lock attribute object

## LIBRARY

POSIX threads library (*libpthread*, *-lpthread*)

## SYNOPSIS

```
#include <pthread.h>
```

**int pthread\_rwlockattr\_setkind\_np(pthread\_rwlockattr\_t \****attr***,**                        **int** *pref***);** **int pthread\_rwlockattr\_getkind\_np(**                        **const pthread\_rwlockattr\_t \*restrict** *attr***,**                        **int \*restrict** *pref***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**pthread\_rwlockattr\_setkind\_np**(), **pthread\_rwlockattr\_getkind\_np**():

```
    _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
```

## DESCRIPTION

The **pthread\_rwlockattr\_setkind\_np**() function sets the "lock kind" attribute of the read-write lock attribute object referred to by *attr* to the value specified in *pref*. The argument *pref* may be set to one of the following:

- **PTHREAD\_RWLOCK\_PREFER\_READER\_NP**

  This is the default. A thread may hold multiple read locks; that is, read locks are recursive. According to The Single Unix Specification, the behavior is unspecified when a reader tries to place a lock, and there is no write lock but writers are waiting. Giving preference to the reader, as is set by **PTHREAD\_RWLOCK\_PREFER\_READER\_NP**, implies that the reader will receive the requested lock, even if a writer is waiting. As long as there are readers, the writer will be starved.

- **PTHREAD\_RWLOCK\_PREFER\_WRITER\_NP**

  This is intended as the write lock analog of **PTHREAD\_RWLOCK\_PREFER\_READER\_NP**. This is ignored by glibc because the POSIX requirement to support recursive read locks would cause this option to create trivial deadlocks; instead use **PTHREAD\_RWLOCK\_PREFER\_WRITER\_NONRECURSIVE\_NP** which ensures the application developer will not take recursive read locks thus avoiding deadlocks.

- **PTHREAD\_RWLOCK\_PREFER\_WRITER\_NONRECURSIVE\_NP**

  Setting the lock kind to this avoids writer starvation as long as any read locking is not done in a recursive fashion.

The **pthread\_rwlockattr\_getkind\_np**() function returns the value of the lock kind attribute of the read-write lock attribute object referred to by *attr* in the pointer *pref*.

## RETURN VALUE

On success, these functions return 0. Given valid pointer arguments, **pthread\_rwlockattr\_getkind\_np**() always succeeds. On error, **pthread\_rwlockattr\_setkind\_np**() returns a nonzero error number.

## ERRORS

- **EINVAL**

  *pref* specifies an unsupported value.

## STANDARDS

GNU; hence the suffix "\_np" (nonportable) in the names.

## HISTORY

glibc 2.1.

## SEE ALSO

[**pthreads**(7)](/pthreads/7.md)
