2012-09-09 2 views
0

다음 코드는 줄 바꿈을하지 않고 메시지를 전송합니다.Ruby - 스레드가 메서드 삽입을 고려하지 않는 이유는 무엇입니까?

threads = [] 
counter = 1000 
counter.times do 
    threads << Thread.new do 
     puts "This is a line." 
     sleep 1 
    end 
end 

threads.each {|t| t.join} 

결과는 정돈 방법으로 결과 행의 인쇄 어쨌든

This is a line. This is a line 

This is a line. 
This is a line. 

and so on... 

있나요입니까?

+0

이 jruby가 맞습니까? 나는 당신이 MRI로 이런 행동을한다고 생각하지 않습니다. – pguardiario

+0

MRI 1.9.3-p130에서 나온 것입니다. –

답변

2

puts은 내부적으로 인수를 인쇄 한 다음 개행 문자를 인쇄하여 작동합니다. 때로는 스레드가 두 작업 사이에서 중단되어보고있는 동작이 발생합니다. 대신에 다음과 같이 말할 수 있습니다 :

print "This is a line.\n" 

... 단 한 번의 조작으로 줄 바꿈을 포함하여 전체 문자열을 작성합니다.

관련 문제