`
秦朝古月
  • 浏览: 227559 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读《The Ruby Way》之线程

    博客分类:
  • Ruby
阅读更多
经常提及线程,但是用线程编的程序真的是不多。仔细的学习一下吧。

线程创建
thread = Thread.new do
  # Something to do
end

线程的局部变量,要注意这些局部变量只是引用,并不能复制。
thread = Thread.new do
  t = Thread.current
  t[:var1] = "This is a string"
  t[:var2] = 365
end
x = thread[:var1]  # "This is a string"
y = thread[:var2]  # 365

线程状态
Thread.list    # 返回所有活跃状态的线程
Thread.main    # 返回主线程
Thread.current # 返回当先线程

线程函数
Thread.kill(t1) # Kill this thread now
Thread.pass(t2) # Pass execution to t2 now
t3 = Thread.new do
  sleep 20
  Thread.exit   # Exit the thread
  puts "Can't happen!" # Never reached
end
Thread.kill(t2) # Now kill t2

t3 = Thread.new do
  Thread.stop   # Stop the thread
end

t4 = Thread.new do
  Thread.stop   # Stop the thread
end

t3.wakeup       # 修改线程的状态,使它变得可以运行,但不使其运行
t4.run          # 唤醒进程,立即运行

t3.join         # 等待t3线程结束

# Now exit the main thread (killing any others)
Thread.exit

同步线程-临界区,Thread.critical设置成True可禁止其他线程被调度。
x = 0
t1 = Thread.new do
  1.upto(1000) do
    Thread.critical = true
    x = x + 1
    Thread.critical = false
  end
end

同步线程-互斥,需要用到Mutex库。
require 'threadb'

@mutex = Mutex.new
x = 0
t1 = Thread.new do
  1.upto(1000) do
    @mutex.lock
      x = x + 1
    @mutex.unlock
  end
end

# 或
t2 = Thread.new do
  1.upto(1000) do
    @mutex.synchronize do
      x = x + 1
    end
  end
end

还有mutex_m库,定义的Mutex_m模块可以被混合插入类中。
QueueSizedQueue是支持线程的队列,不用担心同步问题。
条件变量(condition varizble)可以为线程同步提供高级控制。
分享到:
评论

相关推荐

    The Ruby Way(第2版)

    The Ruby Way(第2版) <br>The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...

    The Ruby Way--3rd Edition--2015-英文版

    The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    THE RUBY WAY(中文版)(第二版)pdf

    《The Ruby Way 第二版》...“《The Ruby Way (第2版)中文版》在阐述元编程(metaprogramming)等方面尤其出类拔萃,而元编程是Ruby最引人注目的方面之一。” ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    the-ruby-way

    the ruby way the ruby way

    the ruby way 2ed

    《The Ruby Way 2nd Edition》是一本深入探讨Ruby编程语言的经典著作,旨在帮助读者全面理解和掌握Ruby的精髓。这本书的第二版在2006年出版,由Addison-Wesley出版,作者通过深入浅出的方式,揭示了Ruby语言的强大...

    11.5 时间日期the ruby way.rar

    "11.5 时间日期the ruby way"这个主题深入探讨了Ruby中处理时间日期的最佳实践和常见用法。让我们逐一了解这些知识点。 首先,`Time.now`是Ruby中获取当前时间的标准方法。它返回一个`Time`对象,表示自1970年1月1...

    ruby学习资源(Programming Ruby, Learning Ruby, The Ruby Way)

    内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm

    Addison Wesley The Ruby Way 2Nd Edition Oct 2006.pdf(英文版)

    ### Addison Wesley《The Ruby Way》第二版(2006年10月) #### 书籍概览 《The Ruby Way》是由Hal Fulton编写的关于Ruby编程语言的经典著作,该书的第二版出版于2006年10月,由Addison Wesley Professional出版社...

    the ruby way

    《The Ruby Way》是一本备受推崇的Ruby编程教程,它以独特的方式深入浅出地介绍了Ruby语言。这本书的核心理念是“如何解决问题”,作者通过实际的编程示例和问题解决策略,帮助读者理解Ruby的强大功能和优雅语法。 ...

    Learn Python the Hard Way(高清.英文.书签.第三版).pdf

    Shaw is the author of the popular online books Learn Python the Hard Way, Learn Ruby the Hard Way, and Learn C the Hard Way. He is also the creator of several open source software projects like ...

    The Ruby Way

    Ruby is a fully object-oriented, dynamic scripting language which borrows some of the best features from LISP, Smalltalk, Perl, CLU, and other languages, and blends them into a harmonious whole. The ...

    Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm

    《The Ruby Way》第二版是Addison-Wesley出版社在2006年推出的一本深入浅出的Ruby编程语言教程。这本书专为初学者设计,旨在帮助读者快速掌握Ruby语言的基础和高级特性,从而轻松入门Ruby编程。Ruby是一种动态、开放...

    Ruby多线程编程初步入门

    相比之下,多线程程序则允许多个线程同时执行。在多核处理器上,这些线程可以在物理上同时运行;而在单核处理器上,则通过快速切换来模拟并行执行的效果。 2. **线程的生命周期**:一个线程从创建到销毁的过程称为...

    The Ruby Programming Language 介绍

    在《The Ruby Programming Language》这本书中,作者深入浅出地介绍了Ruby的各个方面,从基础语法到高级特性的应用,是学习和理解Ruby的宝贵资源。书中涵盖了类和对象、模块、方法、变量、控制结构、异常处理、正则...

Global site tag (gtag.js) - Google Analytics