ntl-actor 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/actor/queue.rb +13 -7
  3. metadata +9 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5907994a5235c2caf3525edae99d5fe13c3cd646
4
- data.tar.gz: 685249f008ab826d94f1740a7045ff91735f1b52
3
+ metadata.gz: 47b2908a5c8c0845acf09f5f4f7a75e89c913d55
4
+ data.tar.gz: a90ae411a5f3bc54ee2e169067cf6d3c5c0dcadf
5
5
  SHA512:
6
- metadata.gz: 047c45295560373e9354b846f054e7f38a6f030cfe6a03555faee89b1697c52ac83d452e394707f6c809c623fa6489319cb5bb27035f4ee95b4689664e7ea42c
7
- data.tar.gz: a8fd3d31faf03d9db947ed8ec94aded72416c3e13f78eb3cd47025bcfb0eaa67eb030e7b03e5d4ad18332d9fce02e0912d72fc470af19bbb8275614894a65bc3
6
+ metadata.gz: d6321566f603c6884202bc129e3435bba0a8f91fd8ae8c06c3a6db16dbf6487b1f43ab82a278a61276200c755cacd0ba23b67a6252ec6d6e80f52422f5aee4a2
7
+ data.tar.gz: 250ba0a32174e3311debcc64bdf92d63bdddb40df5546657403453879992b315a7493e787400a06a125020f72d7826d0a96ad60cd3d52dd34581a3ab2eb02c48
data/lib/actor/queue.rb CHANGED
@@ -4,6 +4,7 @@ module Actor
4
4
  attr_reader :reader_positions
5
5
  attr_reader :list
6
6
  attr_reader :mutex
7
+ attr_reader :write_queue
7
8
  attr_accessor :tail
8
9
 
9
10
  def initialize
@@ -11,6 +12,7 @@ module Actor
11
12
  @reader_positions = Hash.new 0
12
13
  @list = []
13
14
  @mutex = Mutex.new
15
+ @write_queue = ::Queue.new
14
16
  @tail = 0
15
17
  end
16
18
 
@@ -22,7 +24,11 @@ module Actor
22
24
  mutex.synchronize do
23
25
  relative_position = position - tail
24
26
 
25
- until list.count > relative_position
27
+ loop do
28
+ flush_write_queue
29
+
30
+ break if list.count > relative_position
31
+
26
32
  return nil unless wait
27
33
 
28
34
  blocked_threads << Thread.current
@@ -66,17 +72,13 @@ module Actor
66
72
  end
67
73
 
68
74
  def size
69
- list.size
75
+ list.size + write_queue.size
70
76
  end
71
77
 
72
78
  def write object
73
- # Owning the mutex is not necessary here; the worst that can happen is
74
- # that occasionally we write a object when there aren't any readers.
75
79
  return unless readers?
76
80
 
77
- mutex.synchronize do
78
- list << object
79
- end
81
+ write_queue << object
80
82
 
81
83
  blocked_threads.each &:wakeup
82
84
  end
@@ -109,6 +111,10 @@ module Actor
109
111
  ref_count
110
112
  end
111
113
 
114
+ def flush_write_queue
115
+ list << write_queue.deq until write_queue.empty?
116
+ end
117
+
112
118
  def up position
113
119
  reader_positions[position] += 1
114
120
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ntl-actor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Ladd
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-28 00:00:00.000000000 Z
11
+ date: 2016-08-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Implementation of actor pattern for ruby designed for simplicity and frugality
13
+ description: Implementation of actor pattern for ruby designed for simplicity and
14
+ frugality
14
15
  email: nathanladd+github@gmail.com
15
16
  executables: []
16
17
  extensions: []
@@ -48,7 +49,7 @@ homepage: https://github.com/ntl/actor
48
49
  licenses:
49
50
  - MIT
50
51
  metadata: {}
51
- post_install_message:
52
+ post_install_message:
52
53
  rdoc_options: []
53
54
  require_paths:
54
55
  - lib
@@ -63,9 +64,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.6.4
68
- signing_key:
67
+ rubyforge_project:
68
+ rubygems_version: 2.6.6
69
+ signing_key:
69
70
  specification_version: 4
70
71
  summary: Implementation of actor pattern for ruby
71
72
  test_files: []