diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2010-09-30 12:08:34 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2010-09-30 12:08:34 +0200 |
commit | a8b718b824a443dbe4a9e4cadc11561473de8e17 (patch) | |
tree | ee5c64211f3bf7ba4f9549576dd3fea7f92b4d08 /data | |
parent | 0442fc1546a2f5ca3bb68e4cdae2e4cd8ae1df45 (diff) |
Revert "markov: removed unnecessary mutexes"
This reverts commit 06485aeb187dde5e81204b06c8e956e7e035c323. The mutex
is necessary because of the concurrent learning and database conversion.
Some other approach should be used instead (e.g. skipping the mutex if
not running a conversion).
Diffstat (limited to 'data')
-rwxr-xr-x | data/rbot/plugins/markov.rb | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/data/rbot/plugins/markov.rb b/data/rbot/plugins/markov.rb index 0475ab4d..21c4d631 100755 --- a/data/rbot/plugins/markov.rb +++ b/data/rbot/plugins/markov.rb @@ -226,6 +226,8 @@ class MarkovPlugin < Plugin @chains.set_default([]) @rchains = @registry.sub_registry('v2r') @rchains.set_default([]) + @chains_mutex = Mutex.new + @rchains_mutex = Mutex.new @upgrade_queue = Queue.new @upgrade_thread = nil @@ -611,27 +613,31 @@ class MarkovPlugin < Plugin def learn_triplet(word1, word2, word3) k = "#{word1} #{word2}" rk = "#{word2} #{word3}" - total = 0 - hash = Hash.new(0) - if @chains.key? k - t2, h2 = @chains[k] - total += t2 - hash.update h2 + @chains_mutex.synchronize do + total = 0 + hash = Hash.new(0) + if @chains.key? k + t2, h2 = @chains[k] + total += t2 + hash.update h2 + end + hash[word3] += 1 + total += 1 + @chains[k] = [total, hash] end - hash[word3] += 1 - total += 1 - @chains[k] = [total, hash] - # Reverse - total = 0 - hash = Hash.new(0) - if @rchains.key? rk - t2, h2 = @rchains[rk] - total += t2 - hash.update h2 + @rchains_mutex.synchronize do + # Reverse + total = 0 + hash = Hash.new(0) + if @rchains.key? rk + t2, h2 = @rchains[rk] + total += t2 + hash.update h2 + end + hash[word1] += 1 + total += 1 + @rchains[rk] = [total, hash] end - hash[word1] += 1 - total += 1 - @rchains[rk] = [total, hash] end |