X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=data%2Frbot%2Fplugins%2Fmarkov.rb;h=21c4d63172996f6dde039132941a13f6ab97a03e;hb=052217de30c59206d7025b582d4604557a747470;hp=0475ab4df41a0ac78caf25202a84ce292a5455cc;hpb=8cc5ed2d63fe1de830009586b0102fc02f07ebfb;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git 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