单生产者单消费者模式的无锁队列实现

本文详细介绍了如何实现一个无锁队列,特别关注单生产者和单消费者的情景。通过避免使用锁来提高并发性能,讨论了无锁数据结构的关键概念,并提供了具体的代码实现。
摘要由CSDN通过智能技术生成
#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值