---
name: "ck_brlock"
section: "3"
platform: "linux"
package: "libck-dev"
version: "0.7.2-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ck_brlock"
---

# ck\_brlock(3)

big-reader locks

## NAME

**ck\_brlock\_init**, **ck\_brlock\_write\_lock**, **ck\_brlock\_write\_unlock**, **ck\_brlock\_write\_trylock**, **ck\_brlock\_read\_register**, **ck\_brlock\_read\_unregister**, **ck\_brlock\_read\_lock**, **ck\_brlock\_read\_trylock**, **ck\_brlock\_read\_unlock** – big-reader locks

## LIBRARY

Concurrency Kit (libck, -lck)

## SYNOPSIS

**#include \<ck\_brlock.h\>**

ck\_brlock\_t brlock = CK\_BRLOCK\_INITIALIZER;

ck\_brlock\_reader\_t reader = CK\_BRLOCK\_READER\_INITIALIZER;

*void*\

**ck\_brlock\_init**(*ck\_brlock\_t \*br*);

*void*\

**ck\_brlock\_write\_lock**(*ck\_brlock\_t \*br*);

*void*\

**ck\_brlock\_write\_unlock**(*ck\_brlock\_t \*br*);

*bool*\

**ck\_brlock\_write\_trylock**(*ck\_brlock\_t \*br*, *unsigned int factor*);

*void*\

**ck\_brlock\_read\_register**(*ck\_brlock\_t \*br*, *ck\_brlock\_reader\_t \*reader*);

*void*\

**ck\_brlock\_read\_unregister**(*ck\_brlock\_t \*br*, *ck\_brlock\_reader\_t \*reader*);

*void*\

**ck\_brlock\_read\_lock**(*ck\_brlock\_t \*br*, *ck\_brlock\_reader\_t \*reader*);

*bool*\

**ck\_brlock\_read\_trylock**(*ck\_brlock\_t \*br*, *ck\_brlock\_reader\_t \*reader*, *unsigned int factor*);

*void*\

**ck\_brlock\_read\_unlock**(*ck\_brlock\_reader\_t \*reader*);

## DESCRIPTION

Big reader locks are distributed reader-writer locks with low latency constant time reader acquisition (with respect to number of concurrent readers). On the other hand, writer acquisitions are a relatively expensive O(n) operation. This is a write-biased lock.

## EXAMPLE

```
static ck_brlock_t lock = CK_BRLOCK_INITIALIZER;
static __thread ck_brlock_reader_t reader;
static void
reader(void)
{
	/* Add our thread as a lock participant. */
	ck_brlock_read_register(&lock, &reader);
	for (;;) {
		ck_brlock_read_lock(&lock, &reader);
		/* Read-side critical section. */
		ck_brlock_read_unlock(&reader);
		if (ck_brlock_read_trylock(&lock, &reader, 1) == true) {
			/* Read-side critical section. */
			ck_brlock_read_unlock(&reader);
		}
	}
	return;
}
static void
writer(void)
{
	for (;;) {
		ck_brlock_write_lock(&lock);
		/* Write-side critical section. */
		ck_brlock_write_unlock(&lock);
		if (ck_brlock_write_trylock(&lock, 1) == true) {
			/* Write-side critical section. */
			ck_brlock_write_unlock(&lock);
		}
	}
	return;
}
```

## SEE ALSO

ck\_bytelock(3), [ck\_rwlock(3)](/ck_rwlock/3.md)

Additional information available at http://concurrencykit.org/
