mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
31 lines
748 B
C
31 lines
748 B
C
#pragma once
|
|
#include "foundation/types.h"
|
|
#include "nu/queue_node.h"
|
|
#include "foundation/align.h"
|
|
/* lock free stack object
|
|
multiple threads can push and pop without locking
|
|
note that order is not guaranteed. that is, if Thread 1 calls Insert before Thread 2, Thread 2's item might still make it in before.
|
|
*/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef NALIGN(8) struct lifo_struct_t
|
|
{
|
|
volatile queue_node_t *head;
|
|
uint32_t aba;
|
|
} lifo_t;
|
|
|
|
/* use this to allocate an object that will go into this */
|
|
queue_node_t *lifo_malloc(size_t bytes);
|
|
void lifo_free(queue_node_t *ptr);
|
|
|
|
void lifo_init(lifo_t *lifo);
|
|
void lifo_push(lifo_t *lifo, queue_node_t *cl);
|
|
queue_node_t *lifo_pop(lifo_t *lifo);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|