免等待缓冲区填充算法

| 我有一个恒定宽度N的缓冲区,两端都有多个进程填充-每个进程可以同时将L个元素推到最左边的空白位置,或者将R个元素推到最右边的空白位置。 我使用CAS指令对两个变量(左堆栈顶部和右堆栈顶部)上的进程进行同步。 确保缓冲区不会溢出,实际上,堆栈顶部之间将留出一个元素的空间。我需要的是这些过程中只有一个可以报告该空白区域的位置。 最初,我必须同时在左侧和右侧同时进行推压,因此在向左推然后向右推之后,该过程可以在左侧堆栈顶部看,将其与最后一次向右推的位置进行比较+1,然后如果这两个相等,则该过程为最后一个过程(当缓冲区已满时向右推动的最后一个过程获胜)。但是,现在我已经意识到我不能保证最终会在两端同时进行推送,因此该协议无法应用。 您能想到足以满足需求的免等待协议吗?我可以在CAS指令中使用更多变量,但是我无法一次原子地修改或读取多个变量。当然,变量越少越好。     
已邀请:

要回复问题请先登录注册