带pthread的无锁循环队列。有什么需要注意的吗?

| 我想在两个pthread之间实现一个无锁的单一生产者,单一消费者的循环队列。在ARM Linux上用C语言编写。 队列将保存字节,生产者将memcpy()放入其中,而使用者将其写入(写入文件中)。 认为我可以将int和head的偏移量存储为int且一切正常就可以了吗? 我想知道诸如编译器优化之类的事情,这意味着我的头/尾写位于寄存器中,而其他线程看不到它,或者在某个地方需要内存屏障。     
已邀请:
        pthread的内存一致性模型无法为您构建无锁算法提供任何帮助。您自己一个人-您将必须使用体系结构提供和要求的任何原子指令和内存屏障。您还必须查阅编译器文档,以确定如何请求编译器障碍。 几乎可以肯定,使用受互斥和条件变量保护的普通队列实现会更好-如果队列仅存储指向要写到文件的缓冲区的指针(而不是数据本身),则锁争用不应这是一个问题,因为仅在将指针添加到队列或从队列中删除指针时才需要保持锁定。     

要回复问题请先登录注册