一种高性能无锁队列设计

分布式与多核处理器在共享资源的情况下均要求在线程安全完成提交的任务,在多线程并发处理大量数据任务情况下为解决多生产者多消费者保证任务队列线程安全设计查找到一种高性能无锁队列设计,进行学习、研究。

主要问题—资源竞争

一个通用的无锁队列似乎相当容易实现。问题的根源在于相同的变量必然需要与多个线程共享。例如,采取一种基于链表的通用方法:至少需要共享列表的头部和尾部,因为消费者都需要能够读取和更新头部,而生产者都需要能够更新尾部。当多个线程需要更新队列但要求保持队列处于一致的状态下肯定会导致资源分互斥访问。例如,如果消费者从队列中读取最后一个任务节点并仅更新头部,尾指针不应该指向它,因为该任务节点很快就会被释放。但是消费者可能被操作系统打断,在更新尾部之前暂停几毫秒,在这段时间内,尾指针可以被另一个生产者更新,然后第一个消费者将其设置为null就太晚了。

解决共享数据安全访问是无锁编程的关键。通常最好的方法是设想一种算法,它不需要首先更新多个变量以保持一致性,或者增量更新仍然使数据结构保持一致状态。不同的技巧可以使用,如在指针的最后两位存储额外的状态,指针和引用计数等,但像这些方法只能越走越远,真正的解决办法是开发算法本身。

设计思路

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值