macro LFDS711_FREELIST_GET_VALUE_FROM_ELEMENT
Jump to navigation
Jump to search
Source Files
└───liblfds711 └───inc └───liblfds711 lfds711_freelist.h
Opaque Structures
struct lfds711_freelist_element;
Macro
#define LFDS711_FREELIST_GET_VALUE_FROM_ELEMENT( freelist_element )
Parameters
freelist_element
- A struct lfds711_freelist_element. Not a pointer to it - the struct itself.
Return Value
Returns a void pointer, the value from the element.
Notes
The value set into a freelist element is only guranteed to be visible to another logical core once the element has been popped by a thread running on that logical core.
So, for example, if there was a globally allocated freelist element, where a thread on logical core A set a value and then pushed the element to the freelist, a thread on logical core B would only be guaranteed to see the value set by the other thread once it pops the element from the freelist.
As with all liblfds macros, the macro operates on the structure itself, not a pointer to it.
Example
#include <stdio.h> #include "liblfds711.h" int main() { char freelist_element_name[64] = "Thucydides", *freelist_element_name_temp; struct lfds711_misc_prng_state ps; struct lfds711_freelist_element fe, *fe_temp; struct lfds711_freelist_state fs; lfds711_misc_library_init_valid_on_current_logical_core(); lfds711_misc_prng_init( &ps ); lfds711_freelist_init_valid_on_current_logical_core( &fs, NULL ); LFDS711_FREELIST_SET_VALUE_IN_ELEMENT( &fe, (void *) freelist_element_name ); lfds711_freelist_push( &fs, &fe, &ps ); lfds711_freelist_pop( &fs, &fe_temp, &ps ); freelist_element_name_temp = (char *) LFDS711_FREELIST_GET_VALUE_FROM_ELEMENT( *fs_temp ); printf( "freelist element name is \"%s\"\n", (char *) freelist_element_name_temp ); lfds711_freelist_cleanup( &fs, NULL ); lfds711_misc_library_cleanup(); return( EXIT_SUCCESS ); }