https://github.com/dcristoloveanu/clds
C Lockless Data Structures
https://github.com/dcristoloveanu/clds
c data-structures hash-table hazard-pointer library lock-free lockless singly-linked-list
Last synced: 3 months ago
JSON representation
C Lockless Data Structures
- Host: GitHub
- URL: https://github.com/dcristoloveanu/clds
- Owner: dcristoloveanu
- License: mit
- Created: 2018-03-07T04:35:04.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-08-02T21:46:16.000Z (almost 4 years ago)
- Last Synced: 2025-01-18T15:43:34.789Z (5 months ago)
- Topics: c, data-structures, hash-table, hazard-pointer, library, lock-free, lockless, singly-linked-list
- Language: C
- Size: 699 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# C Lockless Data Structures
`clds` is a general purpose C library implementing several lockless data structures.
Implemented lockless data structures:
- Singly linked list
- Hash table*This library is work in progress*. The first release should happen once the first lockless structure is usable and working.
The goals are:
- Performant lockless data structures
- C11 compliant code.## Dependencies
`clds` uses `azure-c-shared-utility`, which is a C library providing common functionality for basic tasks (string manipulation, list manipulation, logging, etc.).
`azure-c-shared-utility` is available here: https://github.com/Azure/azure-c-shared-utility and it is used as a submodule.`clds` uses `ctest` as a test runner.
`clds` uses `umock-c` as mocking framework.`clds` uses cmake for configuring build files.
## Setup
### Build
- Clone `clds` by:
```
git clone --recursive https://github.com/dcristoloveanu/clds.git
```- Create a folder named `cmake` under `clds`
- Switch to the `cmake` folder and run
```
cmake ..
```- Build
```
cmake --build .
```### Building the tests
In order to build the unit tests use:
```
cmake .. -Drun_unittests:bool=ON
```## Switching branches
After any switch of branches (git checkout for example), one should also update the submodule references by:
```
git submodule update --init --recursive
```