当前位置:  开发笔记 > 后端 > 正文

如何计算线程等待互斥量?

如何解决《如何计算线程等待互斥量?》经验,为你挑选了1个好方法。



1> Kristján..:

没有内置的方法来计算等待a的线程Mutex,但是如果你可以将你的问题转换为使用a Queue,那么就有一种num_waiting方法.

Mutex使用a 模拟a Queue,您将获得锁定pop并通过push值释放锁定.您的不变量是队列在任何给定时刻只包含0或1个项目.

require 'thread'

semaphore = Queue.new
semaphore.push(1) # Make synchronization token available

threads = []
5.times do |i|
  threads << Thread.new do
    semaphore.pop # Blocks until token available
    puts "Thread #{i} working, #{semaphore.num_waiting} threads waiting."
    sleep rand(3) # Do work
    semaphore.push(1) # Release token
  end
end

threads.each(&:join)
$ ruby queue_lock.rb
Thread 0 working, 0 threads waiting.
Thread 1 working, 3 threads waiting.
Thread 3 working, 2 threads waiting.
Thread 2 working, 1 threads waiting.
Thread 4 working, 0 threads waiting.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有