마르코 칸투가 작성한 10.4.1의 새로운 기능 중 TLightweightMREW 레코드에 대해 간략하게 정리한 글입니다.


 

10.4.1 버전은 품질 향상에 가장 중점을 두었는데요, 그 중 눈에 띄는 것 한 가지는 RTL 동기화 개선, 특히 모바일 앱에서의 TMultiReadExclusiveWriteSynchronizer (TMREWSync라고 많이들 부르시죠) 사용 문제 해결입니다.  윈도우 OS 외의 다른 플랫폼에서 구현하는 것이 굉장히 제한적인 클래스였습니다.

 

 

새로운 TLightweightMREW 레코드

 

10.4.1은 새로운 리더-라이트 락(Reader-Writer Lock) 구현이 가능해졌습니다. 10.4.1에서 지원하는 모든 플랫폼에서 활용이 가능해졌고, 더 빨라진 속도와 가벼운 용량까지 정말 좋아졌죠. 이 새로운 레코드는 네이티브 POSIX API 를 활용합니다. 

 

TLightweightMREW 레코드는 System.SyncObjs 유닛의 일부로 리더-라이트 락(MRSW lock 또는 MREW lock으로 더
잘 알려져 있죠)을 네이티브로 구현할 수 있습니다. 쓰래드는 
TLightweightMREW를 이용해 빈번하게 읽지만(Read), 자주 쓰지(Write)않는 리소스에 대한 접근을 동기화 할 수 있습니다. 리더-라이트 락은 두가지 엑세스를 제공합니다. 공유 읽기 엑세스를 사용하면 동시에 여러 리더(Reader)가 리소스에 엑세스 할 수 있는 반면, 쓰래드에서 독점적인 쓰기 엑세스 권한 획득을 제한합니다. 독점적 쓰기 엑세스는 하나의 라이터(Writer)만 리소스에 엑세스 할 수 있도록 허용하고 모든 리더의 접근을 차단합니다.

 

 

읽기(Read) 액세스 공유

  • 공유 액세스를 통해 여러 리더(reader)들이 동시에 리소스에 액세스할 수 있습니다.
    그리고 스레드의 독점 쓰기 액세스 권한 취득을 방지할 수 있습니다.
  • 공유 액세스를 계속해서 요청할 수 있습니다. 하나의 스레드가 여러 차례 가능하다는 의미이죠.
    각 BeginRead/TryBeginRead 호출은 EndRead에 대한 호출과 쌍을 이루어야만 합니다.

 

 

독점 쓰기(Write) 액세스

  • 독점 쓰기 액세스는 한 번에 하나의 스레드에만 부여할 수 있습니다. TLightweightMREW 잠금이 특정 모드로 설정되어 있는 동안은 특정 스레드가 공유 읽기 액세스 권한 취득을 방지할 수 있습니다.
  • 독점 접속은 연속적으로 요청할 수 없습니다.
  • 공유 액세스가 특정 액세스에 대해서만 업그레이드될 수 없습니다.

 

 

추가적인 정보 및 플랫폼 차이점

TLightweightMREW 구현은 운영체제에 따라 다르지만, 이 기능은 지원되는 모든 플랫폼에서 거의 동일합니다. 다음 내용은 모든 구현에 적용됩니다.

  • 스레드가 읽기 잠금을 획득 시, 다른 스레드도 읽기 잠금을 획득할 수 있지만 아무도 쓰기 잠금을 획득할 수 없습니다.
  • 스레드가 쓰기 잠금을 획득 시, 다른 스레드들은 읽기 또는 쓰기 잠금을 획득할 수 없습니다.
  • 스레드가 읽기 잠금을 획득 시, 첫 번째 읽기 잠금이 해제되기 전에, 재귀 또는 다른 읽기 잠금을 획득할 수 있습니다.
  • 스레드가 쓰기 잠금을 획득 시, 다른 쓰기 잠금을 획득할 수 없습니다.

 

다음 동작들은 운영체제에 따라 다릅니다.

  • 하나 이상의 리더가 항상 활성화되어 있으면 라이터가 잠금을 얻지 못할 수 있습니다.
  • 동일한 스레드가 재귀적으로 쓰기 잠금을 두번 획득하려고하면 애플리케이셔니 윈도우즈에서는 교착 상태가 되지만, POSIX 시스템에서는 예외를 발생합니다.

 

클래스의 전체 인터페이스와 메소드 목록은 다음 링크를 참고하세요.

 

 

결론

델파이와 C++빌더 10.4.1은TLightweightMREW 레코드와 같은 몇가지 멋진 기능외에도 500여개 이상의 고객의 레포트한 이슈 해결 등이 포함된 품질 중심 릴리즈이기 때문에 주목할 만합니다. 특히 델파이 개발자들에게 10.4.1은 데이비드 밀링턴의 블로그 포스트에서 읽을 수 있듯, 10.4에 도입된 새로운 LSP 기반 코드 인사이트 구현의 큰 개선을 만나볼수 있습니다.

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15442
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39257
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
114 [생산성] RAD 스튜디오, 델파이, C++빌더 단축키 표 관리자 2020.07.28 414
113 [발표자료] 20171109 RAD스튜디오 100% 활용하기: 최신 기술 적용과 확장 관리자 2017.11.10 414
» [10.4 시드니][업데이트 1] 새로운 TLightweightMREW 레코드 관리자 2020.09.10 413
111 이 달의 기술자료 - 2021년 01월 file 험프리 2020.12.24 412
110 [발표자료] 20190718 멀티-플랫폼 앱 멋지게! 쉽게! 빠르게! 완성하기 file 관리자 2019.07.19 412
109 북마크, 탐색기 - 무료 IDE 애드온 기능들 업데이트! (10.4용) 관리자 2020.06.16 411
108 새로운 FMX 멀티-디바이스 테마 - Material Patterns Blue 관리자 2020.02.25 409
107 멀티-플랫폼 앱 멋지게! 쉽게! 빠르게! 완성하기 - #2 완성형 UI에 필요한 데이터 손쉽게 연동하기 file 험프리 2019.07.11 409
106 [발표자료] 2018011 What's NEW! RAD스튜디오 10.2.2 관리자 2018.01.18 409
105 [UX Summit 요약] 레거시 데스크탑 앱 UI/UX 현대화 – 이론부터 실제까지 (Legacy desktop apps UI & UX modernization. From theory to practice) 관리자 2020.11.04 406
104 [10.3 리오][업데이트 2] 델파이 리눅스 클라이언트 애플리케이션 지원 관리자 2019.09.10 406
103 새로운 VCL 윈도우 테마 - Lucky Point 관리자 2020.02.18 405
102 MODERNLISTVIEW 라이브러리 – 커스터마이징 가능한 강력한 크로스 플랫폼 라이브러리 활용 방법 관리자 2021.04.06 400
101 [10.3 리오][업데이트 3] iOS 13, 맥OS 카탈리나 지원을 시작하세요. file 관리자 2019.11.22 397
100 [고객 사례- 델파이, 예술, 창작] 아트젠, 컴퓨터로 완성하는 미술 작품 관리자 2020.08.25 395
99 이 달의 기술자료 - 2020년 01월 험프리 2019.12.26 395
98 이 달의 기술자료 - 2018년 05월 file 험프리 2018.04.27 395
97 플루언트 디자인 시스템으로 애플리케이션 현대화하기 관리자 2021.04.08 393
96 [UX Summit 요약] 윈도우10에 멋진 플루언트UI 룩앤필을 델파이로 구현하기 (Giving your Apps the Fluent UI Look and Feel with Delphi)을 요약했습니다. - (델파이 개발자 뿐만 아니라) 윈도우 애플리케이션 개발자가 알아야할 기본이되고 중요한 마이크로소프트 UI 디자인의 핵심을 정리하고 보여줍니다. 관리자 2020.10.26 392
95 RAD스튜디오 로드맵 (2020.11) 관리자 2020.11.18 390