Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想在两个 pthread 之间实现一个无锁的单生产者、单消费者循环队列;在 C 语言中,在 ARM Linux 上。
队列将保存字节,生产者将 memcpy() 放入,消费者将写入() 到文件中。
认为我可以将头部和尾部偏移量存储在整数中并且一切都会正常工作,这是天真的吗?我想知道诸如编译器优化之类的事情,这意味着我的头/尾写入位于寄存器中并且对其他线程不可见,或者在某处需要内存屏障。
pthreads 的内存一致性模型不会为您构建无锁算法提供任何帮助。你自己一个人——你必须使用你的架构提供和需要的任何原子指令和内存屏障。您还必须查阅编译器文档以确定如何请求编译器屏障。
使用受互斥锁和条件变量保护的普通队列实现几乎肯定会更好 - 如果队列只是存储指向正在写入文件的缓冲区的指针(而不是数据本身),那么锁争用不应该是一个问题,因为只有在从队列中添加或删除指针时才需要持有锁。