역시 Ruby Idioms의 내용입니다. synchronize 를 쓰려면 매번 새로운 변수를 선언해야하는데 그것을 생략하는 기법입니다.
먼저, default 값을 Mutex.new 가 되도록 다음과 같이 해시를 선언합니다.
mlock = Hash.new {|h,k| h[k] = Mutex.new }
다음 뮤텍스가 필요하면,
mlock["entry"].synchronize do # blah end
와 같이 쓴다는 거죠. 장단점은 있을 것입니다. 오타 하나만 잘못치면 백만년가도 못찾을 수 있는 버그를 만들 수 있다거나. 예를들어, lenght 를 legnth 라고 쓴다던가. :-)
Leave a Reply