`
garyli
  • 浏览: 176824 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ruby 线程安全类 Monitor

    博客分类:
  • Ruby
阅读更多

  使用Monitor进行线程的同步比较安全

require 'monitor'
class Counter
	attr_reader :count
	def initialize
		@count = 0
	end
	
	def tick
	  lock = Monitor.new
		lock.synchronize do
			@count += 1
		end
	end
end

c = Counter.new
t1 = Thread.new {100000.times {c.tick}}
t2 = Thread.new {100000.times {c.tick}}
t1.join
t2.join
puts c.count
#200000

 

分享到:
评论

相关推荐

    Ruby源码阅读工具monitor.zip

    monitor是一个在浏览器中显示ruby方法调用栈的gem monitor是基于unroller gem的,unroller把方法调用栈打印在console下面,看起来实在不方便,我在它的基础上,把方法调用栈打印到浏览器上,用的是sinatra,代码和...

    Working with Ruby Threads

    - **调试工具**:使用专门的调试工具来检测线程安全问题,如Ruby的`Thread`类中提供的`monitor_data`方法,可以帮助定位潜在的竞争条件。 - **日志记录**:通过日志记录来监控线程的行为,可以更容易地发现线程安全...

    Ruby多线程编程初步入门

    4. **线程安全**:由于Ruby内部的全局解释器锁(Global Interpreter Lock, GIL),在同一时刻只有一个线程能够执行Ruby代码。这意味着即使在多核处理器上,Ruby线程也不能实现真正的并行执行。然而,通过合理的设计...

    Ruby 方法、类

    在Ruby中,方法和类是构建程序的基本元素,它们是实现代码重用和组织的关键概念。 ### 方法(Methods) 方法在Ruby中是可重复使用的代码块,它们接受参数,执行特定任务,并可能返回值。方法定义使用`def`关键字...

    ruby-线程生命周期及其状态

    ruby|线程生命周期及其状态

    初步讲解Ruby编程中的多线程

    Ruby 中我们可以通过 Thread 类来创建多线程,Ruby的线程是一个轻量级的,可以以高效的方式来实现并行的代码。 创建 Ruby 线程 要启动一个新的线程,只需要调用 Thread.new 即可: # 线程 #1 代码部分 Thread.new {...

    Working with Ruby Threads(完整版)

    通过阅读"Working With Ruby Threads"这本书,你可以深入了解Ruby线程的内部工作原理,学习如何编写高效、安全的多线程Ruby程序。这本书不仅涵盖了理论知识,还提供了许多实用示例和最佳实践,对任何希望提升Ruby...

    ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)

    Ruby线程实现经典的生产者消费者问题,用ruby中的Queue类实现线程同步问题。 代码如下:require “thread” puts “ProAndCon” queue = Queue.new #用队列Queue实现线程同步 producer = Thread.new do 10....

    多线程和并行程序设计

    总结起来,多线程和并行程序设计涉及到的关键知识点包括线程的创建、线程的生命周期管理、任务调度、线程安全和并发控制以及使用Java提供的高级并发工具等。在开发过程中,开发者需要综合考虑这些因素,设计出高效、...

    Ruby的纤程框架Goliath.zip

    Goliath 是一个开源的非堵塞(异步) 的 Ruby Web 服务器框架,由 PostRank 开发。它是一个轻量级的框架提供高性能、Rack API 和中间件支持,配置简单,完全异步处理。 示例代码: require 'goliath' class ...

    线程与并发:Ruby并行世界的探索之旅

    Ruby 提供了一个 `Thread` 类来创建和管理线程。例如,下面的代码展示了如何创建并启动一个简单的线程: ```ruby Thread.new do puts "This is a new thread" end sleep(1) # 等待新线程执行完毕 puts "Main ...

    仓鼠:Ruby的高效,不可变,线程安全的Collection类

    仓鼠 高效,不可变且线程安全的Ruby收集类。 仓鼠提供了6种: , , , , 和 (用作不可变队列或堆栈)。 仓鼠的收藏是一成不变的。 每当您修改仓鼠集合时,原始文件都会保留下来,并返回修改后的副本。 这使它们...

    类变量、全局变量、实例变量, 多态、为什么ruby、ruby编码规范

    本文将深入探讨Ruby语言中的类变量、全局变量、实例变量,以及多态的概念,并结合Ruby编码规范来阐述如何有效地编写代码。 一、类变量 类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby资源ruby-v3.1.1.zip

    4. **线程局部变量**:Ruby 3.1增加了对线程局部变量的支持,这些变量在每个线程中都有独立的副本,提高了多线程编程的安全性和效率。 5. **改进的错误消息**:错误消息现在更加详细,包含更多信息,帮助开发者更快...

    ruby中$~,$?是线程安全的么?

    NULL 博文链接:https://l-d.iteye.com/blog/1488038

    zeitwerk:Ruby的高效且线程安全的代码加载器

    Zeitwerk是用于Ruby的高效且线程安全的代码加载器。 给定,Zeitwerk能够按需(自动加载)或预先(紧急加载)加载项目的类和模块。 您require为自己的文件编写require调用,而是可以知道自己的类和模块随处可见,...

    ruby教程.rar

    线程 安全模型 正则表达式 Ruby的语法 字句构造 程序 变量和常数 字面值 操作符表达式 控制结构/异常处理 方法调用 类/方法的定义 标准库 内部函数 内部变量 内部常数 内部类/模块/异常类 附加...

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    JRuby的最大优点是与Java库的无缝集成,以及在多线程环境下的高效执行。 3. Rubinius:Rubinius是一个用Ruby语言大部分实现的虚拟机,其目标是提供一个高性能的、符合Ruby语言规范的平台。它使用LLVM作为后端,支持...

Global site tag (gtag.js) - Google Analytics