brintos

brintos / linux-shallow public Read only

0
0
Text · 684 B · e11e8d0 Raw
34 lines · c
1// SPDX-License-Identifier: GPL-2.02#include "sharded_mutex.h"3 4#include <stdlib.h>5 6struct sharded_mutex *sharded_mutex__new(size_t num_shards)7{8	struct sharded_mutex *result;9	size_t size;10	unsigned int bits;11 12	for (bits = 0; ((size_t)1 << bits) < num_shards; bits++)13		;14 15	size = sizeof(*result) + sizeof(struct mutex) * (1 << bits);16	result = malloc(size);17	if (!result)18		return NULL;19 20	result->cap_bits = bits;21	for (size_t i = 0; i < ((size_t)1 << bits); i++)22		mutex_init(&result->mutexes[i]);23 24	return result;25}26 27void sharded_mutex__delete(struct sharded_mutex *sm)28{29	for (size_t i = 0; i < ((size_t)1 << sm->cap_bits); i++)30		mutex_destroy(&sm->mutexes[i]);31 32	free(sm);33}34