实现方式 单向链表实现,生产者只操作tail 向tail后拼接数据, 链表中至少需要1个元素, 当head元素被消费后, 标记为结束状态,如果此时head->next为空时,消费者进入等待状态,head->next非空时,head 移除队列; 当向tail后添加元素,tail如果是一个被标记结束,唤醒消费者 代码 #include"stdatomic.h"// 条件锁, 未...
此外,使用spinlock进行小范围加锁其实也不会增加多少开销,会比mutex轻量的多,而其实上文中使用的sem_post有潜在的较大开销,根据实验当消费者线程因sem_wait进入睡眠,而sem_post调用会将其唤醒的时候,调用sem_post将会有比较大的开销。 如果生产者是对开销非常敏感的,而消费者不一定要保证实时处理生产者发来的东西...
现有的无锁队列应该不是要求元素类型T有trivial-constructor,而是要求std::atomic<T>是lock_free的。如...