간단히 말해서, Ruby thread-safe의 표준 라이브러리 Logger 클래스입니까? Google이 발견 한 유용한 정보는 포럼에서 스레드로부터 안전하다고 판단되는 사람입니다. 그리고 나는 로거를 시험해 보느냐 그렇지 않은가를 알아내는 데 시간을 보내는 것을 좋아하지 않는다.Ruby의 stdlib Logger 클래스는 스레드로부터 안전한가요?
당분간 나는 thread-safe 인 log4r을 사용하고있다. 그러나 표준 라이브러리가 이미 그것을한다면 그것은 과도하다. 나는 그것이 스레드 안전 올바른를 얻을 수 있는지에 대한 신뢰도를 보장 할 수 없습니다 동안 그래서, 나는 그것을 만드는 것을 확인할 수
def write(message)
@mutex.synchronize do
if @shift_age and @dev.respond_to?(:stat)
begin
check_shift_log
rescue
raise Logger::ShiftingError.new("Shifting failed. #{$!}")
end
end
@dev.write(message)
end
end
을 :
그렇습니다.하지만 하나의 스레드 만 멀티 스레드 루비 코드를 thread 세이프로 만들지는 않습니다. 원자 연산이 여러 문에 걸쳐있을 수 있기 때문에 스레드 안전성을 보장하지 못합니다. 예 : 'x = point.x; point.x = x + 1'이면 스레드는 두 문장 사이에서 인터럽트 될 수 있고 다른 스레드는이 스레드가 다시 시작할 때 덮어 쓰여지는'point.x'의 값을 수정할 수 있습니다. 또한 JRuby는 Java 스레드를 사용하기 때문에 실제로 멀티 스레드입니다. – Nemo157
좋은 지적. 원래 응답을 참조로 남겼습니다. – kirakun