我想在两个 pthread 之间实现一个无锁的单生产者、单消费者循环队列;在 C 语言中,在 ARM Linux 上。
队列将保存字节,生产者将 memcpy() 东西放入,而消费者将 write() 它们输出到文件。
认为我可以将头部和尾部的偏移量存储在整数中并且一切都会正常工作,这是天真的想法吗? 我想知道诸如编译器优化之类的事情,这意味着我的头/尾写入位于寄存器中并且对其他线程不可见,或者在某处需要内存屏障。
最佳答案
pthreads 的内存一致性模型不会为您构建无锁算法提供任何帮助。你是你自己的 - 你将不得不使用你的架构提供和要求的任何原子指令和内存屏障。您还必须查阅编译器文档以确定如何请求编译器屏障。
使用受互斥量和条件变量保护的普通队列实现几乎肯定会更好 - 如果队列只存储指向正在写出到文件的缓冲区的指针(而不是数据本身),那么锁争用应该这会成为一个问题,因为只有在队列中添加或删除指针时才需要持有锁。
关于c - 带 pthreads 的无锁循环队列。有什么要注意的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6452684/