#ifndef FIFO_H
#define FIFO_H
struct FIFO
{
void **buffer;
unsigned int size;
unsigned int in;
unsigned int out;
};
struct FIFO *FIFO_alloc(unsigned int size);
unsigned int FIFO_put(struct FIFO *FIFO, void** obj_table, unsigned int n);
unsigned int FIFO_get(struct FIFO *FIFO, void** obj_table, unsigned int len);
#endif // FIFO_H
#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define min(a, b) ((a) > (b))?(b):(a)
#define max(a, b) ((a) > (b))?(a):(b)
#ifdef CONFIG_X86_32
/*指令“lock; addl $0,0(%%esp)”表示加锁,把0加到栈顶的内存单元,该指令操作本身无意义,但这些指令起到内存屏障的作用,让前面的指令执行完成。具有XMM2特征的CPU已有内存屏障指令,就直接使用该指令*/
#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2)
#define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM