File tree Expand file tree Collapse file tree 1 file changed +10
-15
lines changed Expand file tree Collapse file tree 1 file changed +10
-15
lines changed Original file line number Diff line number Diff line change @@ -2,63 +2,58 @@ module Concurrent
2
2
class BlockingRingBuffer
3
3
4
4
def initialize ( capacity )
5
- @buffer = Array . new ( capacity )
5
+ @buffer = RingBuffer . new ( capacity )
6
6
@first = @last = 0
7
7
@count = 0
8
8
@mutex = Mutex . new
9
9
@condition = Condition . new
10
10
end
11
11
12
12
def capacity
13
- @mutex . synchronize { @buffer . size }
13
+ @mutex . synchronize { @buffer . capacity }
14
14
end
15
15
16
16
def count
17
- @mutex . synchronize { @count }
17
+ @mutex . synchronize { @buffer . count }
18
18
end
19
19
20
20
def full?
21
- @mutex . synchronize { @count == @ buffer. size }
21
+ @mutex . synchronize { @buffer . full? }
22
22
end
23
23
24
24
def empty?
25
- @mutex . synchronize { @count == 0 }
25
+ @mutex . synchronize { @buffer . empty? }
26
26
end
27
27
28
28
def put ( value )
29
29
@mutex . synchronize do
30
30
wait_while_full
31
- @buffer [ @last ] = value
32
- @last = ( @last + 1 ) % @buffer . size
33
- @count += 1
31
+ @buffer . offer ( value )
34
32
@condition . signal
35
33
end
36
34
end
37
35
38
36
def take
39
37
@mutex . synchronize do
40
38
wait_while_empty
41
- result = @buffer [ @first ]
42
- @buffer [ @first ] = nil
43
- @first = ( @first + 1 ) % @buffer . size
44
- @count -= 1
39
+ result = @buffer . poll
45
40
@condition . signal
46
41
result
47
42
end
48
43
end
49
44
50
45
def peek
51
- @mutex . synchronize { @buffer [ @first ] }
46
+ @mutex . synchronize { @buffer . peek }
52
47
end
53
48
54
49
private
55
50
56
51
def wait_while_full
57
- @condition . wait ( @mutex ) while @count == @ buffer. size
52
+ @condition . wait ( @mutex ) while @buffer . full?
58
53
end
59
54
60
55
def wait_while_empty
61
- @condition . wait ( @mutex ) while @count == 0
56
+ @condition . wait ( @mutex ) while @buffer . empty?
62
57
end
63
58
64
59
end
You can’t perform that action at this time.
0 commit comments