Wait with timeout
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
|
||||
type RingBuffer struct {
|
||||
buffer []string
|
||||
size int
|
||||
@@ -13,7 +12,6 @@ type RingBuffer struct {
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
|
||||
func NewRingBuffer(size int) *RingBuffer {
|
||||
return &RingBuffer{
|
||||
buffer: make([]string, size),
|
||||
@@ -23,7 +21,6 @@ func NewRingBuffer(size int) *RingBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (rb *RingBuffer) Add(item string) {
|
||||
rb.mu.Lock()
|
||||
defer rb.mu.Unlock()
|
||||
@@ -40,7 +37,6 @@ func (rb *RingBuffer) Add(item string) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (rb *RingBuffer) GetLast() (string, int) {
|
||||
rb.mu.Lock()
|
||||
defer rb.mu.Unlock()
|
||||
@@ -52,19 +48,28 @@ func (rb *RingBuffer) GetLast() (string, int) {
|
||||
return rb.buffer[rb.tail], rb.tail
|
||||
}
|
||||
|
||||
|
||||
func (rb *RingBuffer) WaitForNewItem() string {
|
||||
var newItem string
|
||||
rb.mu.Lock()
|
||||
defer rb.mu.Unlock()
|
||||
|
||||
for {
|
||||
rb.mu.Lock()
|
||||
if rb.head != -1 && rb.tail != -1 && rb.buffer[rb.tail] != newItem {
|
||||
newItem = rb.buffer[rb.tail]
|
||||
rb.mu.Unlock()
|
||||
break
|
||||
}
|
||||
rb.mu.Unlock()
|
||||
if rb.tail == -1 {
|
||||
return ""
|
||||
}
|
||||
return newItem
|
||||
|
||||
return rb.buffer[rb.tail]
|
||||
}
|
||||
|
||||
func (rb *RingBuffer) IsEmpty() bool {
|
||||
rb.mu.Lock()
|
||||
defer rb.mu.Unlock()
|
||||
|
||||
return rb.head == -1
|
||||
}
|
||||
|
||||
func (rb *RingBuffer) GetLastPosition() int {
|
||||
rb.mu.Lock()
|
||||
defer rb.mu.Unlock()
|
||||
|
||||
return rb.tail
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user