View Code? Open in Web Editor
NEW
lock-free FIFO queue by C native built it, easy built cross platform(no extra dependencies needed) , guarantee thread safety memory management ever!
License: BSD 2-Clause "Simplified" License
CMake 13.22%
C 85.17%
Shell 1.62%
lfqueue's People
Contributors
lfqueue's Issues
Any notion how does this perform compared to state of the art ring buffers?
Does lfqueue support ARM?
Hi!
I found your code while looking for a lfq implementation in C.
Upon reading it, I am having some difficulty in understanding the following function.
It appears that you are using some ttl, but it's not clear to me why you are doing it.
Do you mind to share some insight?
Thank you
static void
__lfq_check_free (lfqueue_t * lfqueue ) {
lfq_time_t curr_time ;
if (__LFQ_BOOL_COMPARE_AND_SWAP (& lfqueue -> in_free_mode , 0 , 1 )) {
lfq_get_curr_time (& curr_time );
lfqueue_cas_node_t * rtfree = lfqueue -> root_free , * nextfree ;
while ( rtfree && (rtfree != lfqueue -> move_free ) ) {
nextfree = rtfree -> nextfree ;
if ( lfq_diff_time (curr_time , rtfree -> _deactivate_tm ) > 2 ) {
// printf("%p\n", rtfree);
lfqueue -> _free (lfqueue -> pl , rtfree );
rtfree = nextfree ;
} else {
break ;
}
}
lfqueue -> root_free = rtfree ;
__LFQ_BOOL_COMPARE_AND_SWAP (& lfqueue -> in_free_mode , 1 , 0 );
}
__LFQ_SYNC_MEMORY ();
}