smart_engine 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 912e841987ba6da79b04609e0f86580d900676b10711d5e38b614099782702cf
4
- data.tar.gz: 395c81f467a482cde8042dfb207df5aa70b7a865f317fcd068e110b127dfe95e
3
+ metadata.gz: f3f6a846502241aa2029b692dc4f0c81ee004527a3242b750b7c6ea10a37872a
4
+ data.tar.gz: 9bec4690bf081407fc7262610e978065f99422f57df2c1d673469d53cf6f142f
5
5
  SHA512:
6
- metadata.gz: '080a49d84507ca934dcf9435bcbe724cf8146167039e1ebbf0a56343249fbd4c39893a79508a0e08826fb9496eb6a721f5e335a0a9b19149263c8a73c4ebf9bf'
7
- data.tar.gz: 0eb86cfe731f1911969025db50560148858f03d8b8842da9c3bac49fbd3c4dfe74c0c86392438c060c2ec43ff0453da8c9fc3eeed4076bc11c772e59c931ee7c
6
+ metadata.gz: 40e93990c49475cf764d2baf118f32409d0cc6461f5892de680d5222f040110f17c755540284c35a5dbf34d604a62d5255a5d63fa7e9c03035fad1680eafa867
7
+ data.tar.gz: c182166a23faf3ae36202af92048b1a258847ea1de9541deabbee367101af68cfb67bb1d818c634ae8a92da7e8a24c4f94102185f8a7c75c3b43c2da9057f456
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.16.0] - 2022-09-30
5
+ ### Changed
6
+ - `SmartCore::Engine::ReadWriteLock` does not lock the current thread if the current thread has already acquired the lock;
7
+
8
+ ## [0.15.0] - 2022-09-30
9
+ ### Added
10
+ - `SmartCore::Engine::ReadWriteLock#write_owned?` - checking that write lock is owned by current thread or not;
11
+
4
12
  ## [0.14.0] - 2022-09-30
5
13
  ### Added
6
14
  - Read/Write locking mechanizm: `SmartCore::Engine::ReadWriteLock`;
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smart_engine (0.14.0)
4
+ smart_engine (0.16.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -76,6 +76,9 @@ lock = SmartCore::Engine::ReadWriteLock.new
76
76
  lock.read_sync { ...some-read-op... } # waits for writer
77
77
  lock.read_sync { ...some-read-op... } # waits for writer
78
78
  lock.write_sync { ... some-write-op... } # waits for all readers and current writer
79
+
80
+ # is write_sync lock is owned by current thread?
81
+ lock.write_owned? # true or false
79
82
  ```
80
83
 
81
84
  ---
@@ -2,6 +2,7 @@
2
2
 
3
3
  # @api public
4
4
  # @since 0.14.0
5
+ # @version 0.15.0
5
6
  class SmartCore::Engine::ReadWriteLock
6
7
  # @return [void]
7
8
  #
@@ -28,19 +29,32 @@ class SmartCore::Engine::ReadWriteLock
28
29
  @active_reader = false
29
30
  end
30
31
 
32
+ # @return [Boolean]
33
+ #
34
+ # @api public
35
+ # @since 0.15.0
36
+ def write_owned?
37
+ @write_lock.owned?
38
+ end
39
+
31
40
  # @param block [Block]
32
41
  # @return [Any]
33
42
  #
34
43
  # @api public
35
44
  # @since 0.14.0
45
+ # @version 0.16.0
36
46
  def write_sync(&block)
37
- while @active_reader do; end
38
- @write_lock.synchronize do
39
- @active_reader = true
40
- begin
41
- yield
42
- ensure
43
- @active_reader = false
47
+ if @write_lock.owned?
48
+ yield
49
+ else
50
+ while @active_reader do; end
51
+ @write_lock.synchronize do
52
+ @active_reader = true
53
+ begin
54
+ yield
55
+ ensure
56
+ @active_reader = false
57
+ end
44
58
  end
45
59
  end
46
60
  end
@@ -6,7 +6,7 @@ module SmartCore
6
6
  #
7
7
  # @api public
8
8
  # @since 0.1.0
9
- # @version 0.14.0
10
- VERSION = '0.14.0'
9
+ # @version 0.16.0
10
+ VERSION = '0.16.0'
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov