https://github.com/taymindis/lfqueue
lock-free FIFO queue by C native built it, easy built cross platform(no extra dependencies needed) , guarantee thread safety memory management ever!
https://github.com/taymindis/lfqueue
atomic-operation c cpp cross-platform generic-types lock-free lock-free-queue thread-safety threadsafe wait-free
Last synced: 4 months ago
JSON representation
lock-free FIFO queue by C native built it, easy built cross platform(no extra dependencies needed) , guarantee thread safety memory management ever!
- Host: GitHub
- URL: https://github.com/taymindis/lfqueue
- Owner: Taymindis
- License: bsd-2-clause
- Created: 2018-08-29T03:10:43.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2020-11-05T18:33:50.000Z (about 5 years ago)
- Last Synced: 2025-03-24T05:13:09.312Z (8 months ago)
- Topics: atomic-operation, c, cpp, cross-platform, generic-types, lock-free, lock-free-queue, thread-safety, threadsafe, wait-free
- Language: C
- Size: 38.1 KB
- Stars: 143
- Watchers: 12
- Forks: 23
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# lfqueue [](https://travis-ci.org/Taymindis/lfqueue)
lock-free FIFO queue by C native built it, easy built cross platform(no extra dependencies needed) , guarantee thread safety memory management ever!
# All Platform tests
GCC/CLANG | [](https://travis-ci.org/Taymindis/lfqueue)
VS x64/x86 | [](https://ci.appveyor.com/project/Taymindis/lfqueue)
## API
```c
extern int lfqueue_init(lfqueue_t *lfqueue);
extern int lfqueue_enq(lfqueue_t *lfqueue, void *value);
extern void* lfqueue_deq(lfqueue_t *lfqueue);
extern void* lfqueue_single_deq(lfqueue_t *lfqueue);
extern void lfqueue_destroy(lfqueue_t *lfqueue);
extern size_t lfqueue_size(lfqueue_t *lfqueue);
extern void lfqueue_sleep(unsigned int milisec);
```
## Example
```c
int* int_data;
lfqueue_t my_queue;
if (lfqueue_init(&my_queue) == -1)
return -1;
/** Wrap This scope in other threads **/
int_data = (int*) malloc(sizeof(int));
assert(int_data != NULL);
*int_data = i++;
/*Enqueue*/
while (lfqueue_enq(&my_queue, int_data) == -1) {
printf("ENQ Full ?\n");
}
/** Wrap This scope in other threads **/
/*Dequeue*/
while ( (int_data = lfqueue_deq(&my_queue)) == NULL) {
printf("DEQ EMPTY ..\n");
}
// printf("%d\n", *(int*) int_data );
free(int_data);
/** End **/
lfqueue_destroy(&my_queue);
```
#### If you are using single thread dequeue/consume. Please use `lfqueue_single_deq` to get better result
## Build and Installation
For linux OS, you may use cmake build, for other platforms, please kindly include the source code and header file into the project, e.g. VS2017, DEV-C++, Xcode
```bash
mkdir build
cd build
cmake ..
make
./lfqueue-example
valgrind --tool=memcheck --leak-check=full ./lfqueue-example
sudo make install
```
## continuously Test
For continuously test until N number, if you having any issue while testing, please kindly raise an issue
```bash
./keep-testing.sh
```
## Uninstallation
```bash
cd build
sudo make uninstall
```
## You may also like lock free stack LIFO
[lfstack](https://github.com/Taymindis/lfstack)