Lines Matching +full:form +full:- +full:factor

2  * Copyright 2011-2015 Samy Al Bahra.
10 * 2. Redistributions in binary form must reproduce the above copyright
31 * Big reader spinlocks provide cache-local contention-free read
37 * This implementation is thread-agnostic which comes at the cost
68 br->readers = NULL; in ck_brlock_init()
69 br->writer = false; in ck_brlock_init()
83 while (ck_pr_fas_uint(&br->writer, true) == true) in ck_brlock_write_lock()
89 for (cursor = br->readers; cursor != NULL; cursor = cursor->next) { in ck_brlock_write_lock()
90 while (ck_pr_load_uint(&cursor->n_readers) != 0) in ck_brlock_write_lock()
103 ck_pr_store_uint(&br->writer, false); in ck_brlock_write_unlock()
108 ck_brlock_write_trylock(struct ck_brlock *br, unsigned int factor) in ck_brlock_write_trylock() argument
113 while (ck_pr_fas_uint(&br->writer, true) == true) { in ck_brlock_write_trylock()
114 if (++steps >= factor) in ck_brlock_write_trylock()
126 for (cursor = br->readers; cursor != NULL; cursor = cursor->next) { in ck_brlock_write_trylock()
127 while (ck_pr_load_uint(&cursor->n_readers) != 0) { in ck_brlock_write_trylock()
128 if (++steps >= factor) { in ck_brlock_write_trylock()
145 reader->n_readers = 0; in ck_brlock_read_register()
146 reader->previous = NULL; in ck_brlock_read_register()
151 reader->next = ck_pr_load_ptr(&br->readers); in ck_brlock_read_register()
152 if (reader->next != NULL) in ck_brlock_read_register()
153 reader->next->previous = reader; in ck_brlock_read_register()
154 ck_pr_store_ptr(&br->readers, reader); in ck_brlock_read_register()
166 if (reader->next != NULL) in ck_brlock_read_unregister()
167 reader->next->previous = reader->previous; in ck_brlock_read_unregister()
169 if (reader->previous != NULL) in ck_brlock_read_unregister()
170 reader->previous->next = reader->next; in ck_brlock_read_unregister()
172 br->readers = reader->next; in ck_brlock_read_unregister()
182 if (reader->n_readers >= 1) { in ck_brlock_read_lock()
183 ck_pr_store_uint(&reader->n_readers, reader->n_readers + 1); in ck_brlock_read_lock()
188 while (ck_pr_load_uint(&br->writer) == true) in ck_brlock_read_lock()
192 ck_pr_fas_uint(&reader->n_readers, 1); in ck_brlock_read_lock()
200 ck_pr_store_uint(&reader->n_readers, 1); in ck_brlock_read_lock()
209 if (ck_pr_load_uint(&br->writer) == false) in ck_brlock_read_lock()
212 ck_pr_store_uint(&reader->n_readers, 0); in ck_brlock_read_lock()
222 unsigned int factor) in ck_brlock_read_trylock() argument
226 if (reader->n_readers >= 1) { in ck_brlock_read_trylock()
227 ck_pr_store_uint(&reader->n_readers, reader->n_readers + 1); in ck_brlock_read_trylock()
232 while (ck_pr_load_uint(&br->writer) == true) { in ck_brlock_read_trylock()
233 if (++steps >= factor) in ck_brlock_read_trylock()
240 ck_pr_fas_uint(&reader->n_readers, 1); in ck_brlock_read_trylock()
248 ck_pr_store_uint(&reader->n_readers, 1); in ck_brlock_read_trylock()
257 if (ck_pr_load_uint(&br->writer) == false) in ck_brlock_read_trylock()
260 ck_pr_store_uint(&reader->n_readers, 0); in ck_brlock_read_trylock()
262 if (++steps >= factor) in ck_brlock_read_trylock()
275 ck_pr_store_uint(&reader->n_readers, reader->n_readers - 1); in ck_brlock_read_unlock()