我有一个多线程程序,可以在数百个地方打印到控制台.不幸的是,而不是
Line 2 Line 1 Line 3
我明白了
Line2Line1 Line3
我想让puts
线程安全.
在Python中(我认为没有这个问题,但假设它有),我会这样做
old_print = print print_mutex = threading.Lock() def print(*args, **kwargs): print_mutex.acquire() try: old_print(*args, **kwargs) finally: print_mutex.release()
我在Ruby中尝试这个,
old_puts = puts puts_mutex = Mutex.new def puts(*args) puts_mutex.synchronize { old_puts(*args) }
但这不起作用:"未定义的方法old_puts
"
如何使线程安全(即不打印部分线)?
alias old_puts puts
或更现代的方式:
module MyKernel PutsMutex = Mutex.new def puts(*) PutsMutex.synchronize{super} end end module Kernel prepend MyKernel end