summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2010-09-30 12:08:34 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2010-09-30 12:08:34 +0200
commita8b718b824a443dbe4a9e4cadc11561473de8e17 (patch)
treeee5c64211f3bf7ba4f9549576dd3fea7f92b4d08 /data
parent0442fc1546a2f5ca3bb68e4cdae2e4cd8ae1df45 (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-xdata/rbot/plugins/markov.rb44
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