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

보기: 17802|회답: 0

[통신] C 락 #

[링크 복사]
게시됨 2019. 2. 21. 오전 9:43:39 | | |
1. 왜 잠그고 무엇이 잠겨 있는가?

스레드를 사용할 때 가장 효율적인 방법은 물론 비동기식으로, 즉 각 스레드가 서로에 의존하거나 기다리지 않고 동시에 실행됩니다. 하지만 서로 다른 스레드가 특정 자원에 접근해야 할 때는 동기화 메커니즘이 필요합니다. 즉, 동일한 자원을 읽고 쓸 때는 각 연산이 효과적이고 즉각적으로 작동하도록 하기 위해 자원을 한 스레드에 의해 동시에 작동하도록 해야 합니다. 즉, 연산의 원자성을 보장하기 위해서입니다. lock은 C#에서 가장 일반적으로 사용되는 동기화 방식으로, 형식은 lock(objectA){codeB}입니다.


lock(objectA){codeB}는 단순해 보이지만 실제로는 세 가지 의미를 가지고 있으며, 이를 적절히 사용하는 데 필수적입니다:
1. 객체A가 잠겨 있나요? 그렇지 않으면 잠그겠고, 그렇지 않으면 objectA가 해제될 때까지 기다리겠습니다.
2. 잠금 후에는 다른 스레드가 codeB를 호출하거나 codeB 실행 중에 objectA를 사용할 수 없습니다.
3. codeB를 실행한 후 release: objectA, codeB는 다른 스레드에서 접근할 수 있습니다.

2. lock(this)은 어떻게 된 걸까요?

예를 들어 보겠습니다:

t1 스레드에서 lockMe는 lock(this), 즉 메인 함수의 c1을 호출하고, 메인 스레드에서 lock(c1)을 호출할 때는 c1에 접근하기 전에 t1의 lock 블록이 실행될 때까지 기다려야 하므로 c1 관련 모든 연산을 완료할 수 없으므로 c1도 마찬가지입니다. DoNotLockMe()는 실행되지 않습니다.





이전의:배열의 ArraySegment 부분에서 C#
다음:Spring Boot의 심층 실습. Chen Shaojian과 SpringBoot가 공개 + 빠르게 마이크로서비스 시스템을 구축하다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com