⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 03 - synchronizing access to an object.rb

📁 O Reilly Ruby Cookbook source code
💻 RB
字号:
require 'thread'class Object  def synchronize    mutex.synchronize { yield self }  end  def mutex    @mutex ||= Mutex.new  endend#---list = []Thread.new { list.synchronize { |l| sleep(5); 3.times { l.push "Thread 1" } } }Thread.new { list.synchronize { |l| 3.times { l.push "Thread 2" } } }sleep(6)list# => ["Thread 1", "Thread 1", "Thread 1", "Thread 2", "Thread 2", "Thread 2"]#---list = []Thread.new { list.synchronize { |l| sleep(5); 3.times { l.push "Thread 1" } } }Thread.new { 3.times { list.push "Thread 2" } }sleep(6)list# => ["Thread 2", "Thread 2", "Thread 2", "Thread 1", "Thread 1", "Thread 1"]#---require 'aspectr'require 'thread'class Synchronized < AspectR::Aspect  def lock(method_sym, object, return_value, *args)    object.mutex.lock  end  def unlock(method_sym, object, return_value, *args)    object.mutex.unlock  endend#---array = %w{do re mi fa so la ti}Synchronized.new.wrap(array, :lock, :unlock, :push, :pop, :each)#---Thread.new { array.each { |x| puts x } }Thread.new do  puts 'Destroying the array.'  array.pop until array.empty?  puts 'Destroyed!'end# do# re# mi # fa# so# la# ti# Destroying the array.# Destroyed!#---

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -