2014-04-16 3 views
0

저는 Clozure CL을 사용하여 앱을 작성하고 있습니다. 응용 프로그램에서 여러 파일을 작성해야하므로 각 파일에 대해 읽기/쓰기 잠금을 만들었습니다.Lisp에서 읽기 - 쓰기 잠금을 해제하지 않고 잡는 방법은 무엇입니까?

이제 종료 함수를 작성하려고합니다. 모든 파일 쓰기가 완료되었는지 확인한 다음 종료합니다. 기본적으로는 다음과 같이 작동합니다 :

  1. 잡아 모든 파일 읽기 - 쓰기 잠금
  2. 은 CCL

내가 Clozure CL document을 읽고 종료하지만, 복 쓰기 잠금과 같은 모든 기능을 찾을 수 없습니다 . 나는 "grab-lock", "with-read-lock"및 "write-lock"만 찾을 수 있습니다. 'grab-lock'은 읽기 - 쓰기 잠금에서는 작동하지 않으며 나머지 두 개는 자동으로 잠금을 해제합니다. 그렇다면 어떻게 파일을 읽고 쓰기 잠금을 해제하고 (해제하지 않고) 응용 프로그램을 종료 할 수 있습니까?

+0

나는 Clozure CL의 메일 링리스트에서 매우 구체적인 질문을 던집니다. 참조 : http://ccl.clozure.com –

+0

Thx @RainerJoswig. 나는 시도 할 것이다. –

+0

프로그램을 종료 한 후 왜 쓰기 잠금을 유지하려고합니까? 프로그램 종료시 해지되지 않습니까? – zck

답변

1

나는 모든 Clozure CL의 잠금 메커니즘이 익숙하지 않은,하지만 난 어떤 macroexpansion이 작업을 수행하기 위해 하나 이상의 방법을 설명 할 수 있다고 생각 :

CL-USER> (pprint (macroexpand-1 '(with-write-lock (my-lock) 
            do-something))) 

(CCL::WITH-LOCK-CONTEXT 
    (LET* ((#:G350 (MAKE-LOCK-ACQUISITION)) 
     (#:G351 MY-LOCK)) 
    (DECLARE (DYNAMIC-EXTENT #:G350)) 
    (UNWIND-PROTECT 
     (PROGN 
      (CCL::WRITE-LOCK-RWLOCK #:G351 #:G350) 
      DO-SOMETHING) 
     (WHEN (CCL::LOCK-ACQUISITION.STATUS #:G350) 
     (CCL::UNLOCK-RWLOCK #:G351))))) 

나는이 있는지 여부 (ccl::with-lock-context/ccl::write-lock-rwlock를 사용하여 말할 수 없다) 좋은 자신의 코드 에서이 작업을 수행 할 수 있지만 그것은 확실히 방법입니다.

+0

Thx! 나는'ccl :: write-lock-rwlock'을 사용하는 것이 한 가지 방법이라고 동의한다. 나는 또 다른 '공식적인'방법이 있을까? –