2013-11-28 3 views
2

다른 스레드가 해당 파일에 액세스하려고 시도하는 동안 하나의 스레드가 문서 디렉토리에 파일을 쓰는 중입니다. 그렇지 않으면 사용하기 위해 사용할 수 있는지 확인하십시오. 그렇지 않으면 임시 변수가 대신 사용됩니다. 내 질문은 다른 스레드가 파일 쓰기를 완료했는지 또는 파일을 검사하면서 쓰는지를 어떻게 테스트 할 수 있는지입니다.다른 스레드가 ressource에 액세스하고 있는지 확인하는 방법?

답변

2

완료를 확인하는 대신 보조 파일을 사용하여 쓰기를 원 자성으로 만들 수 있습니다.

[NSString writeToFile:... atomically:YES encoding:... error:...]과 비슷한 보조 파일을 지원하는 API를 사용하여 문서를 작성하는 경우 스위치를 전환하는 것만 큼 쉽게 변경할 수 있습니다.

파일을 직접 작성하는 경우 다른 이름의 파일에 먼저 쓰고 파일을 닫은 다음 원하는 이름으로 바꿉니다.

예를 들어 문서를 @"myfile.doc"에 쓰는 호출에서 문서를 @"myfile.doc_aux"에 쓸 수 있고 @"myfile.doc"으로 바꿀 수 있습니다. 쓰기가 완료되기 전에 두 번째 스레드가 @"myfile.doc"의 존재를 확인하면 검사가 실패합니다. 그러나 검사가 성공하면 파일 작성이 완료되었음을 확신 할 수 있습니다.

2

다른 스레드에서 사용 중인지 확인하고 싶지 않습니다. 다른 스레드가 확인 후 바로 사용할 수 있기 때문입니다.

대신 잠금 또는 동기화 지점이 필요합니다. @synchronized()과 NSLock을 살펴보십시오. 둘 다 멀티 스레딩 중에 데이터 무결성을 보장 할 수 있습니다.

관련 문제