2020-05-28 05:55:54 +03:00
|
|
|
# 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
|
|
|
|
|
2020-10-31 04:19:55 +03:00
|
|
|
`clds` uses `c-util`, which is a C library providing common functionality for basic tasks (string manipulation, list manipulation, etc.).
|
|
|
|
`c-util` is available here: https://github.com/Azure/c-util and it is used as a submodule.
|
2020-05-28 05:55:54 +03:00
|
|
|
|
|
|
|
`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:
|
|
|
|
|
|
|
|
```
|
2023-03-30 01:46:41 +03:00
|
|
|
git clone --recursive https://github.com/Azure/clds.git
|
2020-05-28 05:55:54 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
- 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
|
|
|
|
```
|