等待缓冲区填充算法

时间:2011-06-15 16:54:37

标签: synchronization protocols

我有一个宽度为N的缓冲区,它由两端的几个进程填充 - 每个进程可以在一个时刻将L个元素推到最左边的空位置,或者将R个元素推到最右边的空位置。 我使用CAS指令同步两个变量(左堆栈顶部和右堆栈顶部)的进程。

保证缓冲区不会溢出,实际上堆栈顶部之间的一个元素的空间将被留下。我需要的是这些过程中只有一个会报告这个空白区域的位置。

最初我必须在左侧和右侧推动两个,所以在向左推后然后向右推进过程可以看到左侧堆栈顶部,将其与上一个位置进行比较+ 1右推,如果这两个是相等的,那么这个过程就是最后一个(当缓冲区被填充时,最后一个进程向右推进胜利)。但是,现在我已经意识到我无法保证最终能够推动双方,所以这个协议无法应用。

你能想到任何足够的等待协议吗?我可以在CAS指令中使用更多变量,但我不能在一个时刻以原子方式修改或读取多个变量。当然,变量越少越好。

0 个答案:

没有答案