이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 2976|회답: 2

[출처] C#의 Lazy 사용자가 스레드를 안전하게 지키는 방법

[링크 복사]
게시됨 2023. 7. 2. 오후 9:41:55 | | |
.NET 4.0 이후로는 .NET 프레임워크에서 보안 게이지 로딩 타입이 제공되었습니다게으른
Lazy는 멀티스레드 환경에서 동작할 수 있다는 보장이 있습니다가치 획득이 함수는 단 한 번만 실행되므로 구현됩니다싱글턴 모드

과거에는 싱글톤 패턴을 구현하거나 클래스의 정적 초기화 함수를 활용하기 위해 이차 판단 잠금을 사용했습니다
레이지 타입은 이 과정이 더 간단해지고 성능도 더 좋아집니다

Lazy가 생성되면 스레드 설치 모드를 지정할 수 있는데, 현재 두 가지 모드가 있습니다.출판 전용기소 및 출판

출판 전용 모드


1. 초기화 함수를 실행하고 내부 저장소에 박스 넣습니다상자타입, 널 가치 판단 문제를 해결하자면, 케이스가 생성되면 널을 반환합니다.이 프로세스는 스레드 보안이 아닙니다

2. m_boxed가 빈 상태인지 결정합니다. m_boxed 값에 저장된 필드입니다. 빈 필드가 빈 상태라면 박스로 설정됩니다. 이 방법은 원자성을 보장할 수 있습니다.이 프로세스는 스레드 안전입니다

3. 만약 CreateValue가 비어 있으면 다른 스레드들이 이미 인스턴스를 생성했으므로 이미 생성된 인스턴스로 설정하세요

4. 초기화 메서드를 초기화된 것으로 표시하는데, 이는 보통 동시 실행 시 발생하며, CreateValue를 여러 번 실행합니다


출판 전용모드는 다음을 기반으로 사용됩니다상호 연결된 상태입니다. 교환 비교, 이 클래스는 원자성 메서드를 포함합니다CAS(비교 및 교환)

CAS는 CPU가 제공하는 원자 명령어를 사용하여 구현되며, 런타임 버전마다 구현이 다를 수 있습니다
상호 연결된 특정 구현 네이티브 메서드에서는 관심 있는 친구들이 coreclr/jvm 코드를 통해 특정 구현을 확인할 수 있습니다

이 모드에서는,싱글톤 함수는 여러 번 실행될 수 있지만, 결국 하나의 인스턴스만 얻게 됩니다

발사 및 출판 모드

기소 및 출판모드에서 사용되는 모드볼라타일+모니터모니터그것이자물쇠이 문장의 구현, 즉 네이티브 코드의 Monitor 구현은 강력한 잠금장치입니다

모니터큐와 스레드 슬립이 지원되어, 전체 메서드 블록이 단일 스레드 상태로 실행되도록 보장할 수 있습니다


원본 링크:하이퍼링크 로그인이 보입니다.




이전의:ASP.NET ThreadStatic, CallContext, HttpContext의 차이점
다음:SQL Server는 데이터베이스에 대한 현재 연결 수를 조회합니다
 집주인| 게시됨 2023. 7. 2. 오후 9:42:16 |
 집주인| 게시됨 2023. 7. 4. 오후 7:19:45 |
C# 성능 최적화: Lazy가 지연을 두고 Lazy<T>를 초기화합니다
https://www.itsvse.com/thread-7700-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com