문제

내가 이해 주요 기능의 잠금에서 핵심어 MSDN

잠금 문(C#참조)

잠금 키워드 마크 성명 블록으로 중요한 섹션 을 얻는 상호 배타적인 잠금 한,실행 문 다음을 풀어 놓 잠급니다.

해야 할 때 잠금을 사용될까요?

예를 들면 그것은 의미로 다중 스레드 응용 프로그램을 보호하기 때문입니다.그러나 그것은 필요한 경우 응용 프로그램이 회전하지 않은 어떤 다른 스레드가?

은 거기에는 성능 문제를 사용하여 잠금?

나는 단지 상속되는 응용 프로그램을 사용하여 잠금 어디든이며,그것은 하나의 스레드를 알고 싶어야 나는 그들을 떠나서는,그들이 필요?

참고 이의 더 많은 것이 일반적인 질문 지식,응용 프로그램이 알고 싶다면 그것은 좋은 디자인 패턴에 따라 향후 또는 이 피하지 않으면 절대적으로 필요합니다.

도움이 되었습니까?

해결책

해야 할 때 잠금을 사용될까요?

잠금 해야 보호하기 위해 사용될에서 공유 자원 멀티스레드 코드입니다.니다.

그러나 그것은 필요한 경우 응용 프로그램이 회전하지 않은 어떤 다른 스레드가?

절대 그렇지 않습니다.그것은 단지 시간 낭비입니다.그러나 그렇게 당신이 있는지 확인 하십시오지 않는 암시적으로 사용하는 시스템 실이다.예를 들어 사용하는 경우 비동기 I/O 를 나타날 수 있습니다 콜백을에서 임의로 thread,원래 스레드가 있습니다.

은 거기에는 성능 문제를 사용하여 잠금?

그렇습니다.그들은 매우 큰되지 않습에서 하나의 스레드 응용 프로그램,왜 그러나 전화를 걸을 필요가 없?

다면 그것은 좋은 디자인 패턴에 따라 미래[?]

잠그는 모든 것을 다짜고짜 끔찍한 디자인 패턴입니다.는 경우에 당신의 코드의 복잡 임의의 잠그는 다음을 결정하는 백그라운드 스레드를 사용하여 어떤 작품은,실행 가능성이 있으로 교착 상태.공유하는 리소스 사이의 여러 스레드가 필요합주의 디자인,더 많은 분리할 수 있습 까다로운 부분은,더 나은입니다.

다른 팁

모든 해답이 여기에 맞게 보이:잠'유입을 차단하는 스레드에 베이스 캠프의 공식 잠 코드를 동시에.그러나,많은 미묘한 차이 분야에서,하나의 잠 블록의 코드를 자동으로 표시 중요 지역 여타냅니다.

의 효과되는 코드로 표시된 중요한 경우,지역 전체할 수 없는 전적으로 실행되는,런타임을 고려할 수 있습니다 당신의 전체 응용 프로그램을 도메인은 잠재적으로 위태롭게 그리고,따라서 그것을 내에는 메모리.인용 MSDN:

예를 들어,고려 시도하는 작업을 할당하는 메모리를 잡고 있는 동안에는 잠금입니다.는 경우 메모리 할당 실패하면,중단의 현재 작업이 충분하지 않습의 안정성을 보장하기 위해 사용되지 않기 때문에 있을 수 있습에서 다른 작업을 도메인을 기다리는 동일한 잠급니다.면 현재 작업 종료,다른 작업의 교착 상태가 될 수 있습니다.

따라서,귀하의 응용 프로그램은 하나의 스레드,이것에 유해할 수 있습니다.을 고려하는 하나의 방법에 차단 예외가 발생하는 결국 내에서 처리합니다.심지어 경우에는 예외로 처리로 거품을 통해 호출 스택 중요한 지역의 코드가 완료되지 않은 일반적으로.누가는 방법을 알고 있 CLR 반응?

자세한 정보를 읽 이 문서에서 위험의 스레드가 있습니다.중단().

는 마음에 부담이 있는 이유하지 않으로 하나의 스레드로 당신이 생각합니다.Async I/O 습니다.순도 잘 부르에 풀 스레드,예를 들어,일부 의 다양한 타이머 클래스(지 않는 윈도우 폼 타이머,하지만).

일반적으로 말하면 응용 프로그램입니다 하나의 스레드에,당신은하지 않을 얻을 많이 사용하여 잠금 문입니다.지 모르는 응용 프로그램을 정확히,내가 알지 못하는 경우 유용한지만 생각하지 않습니다.또한,당신은 응용 프로그램을 사용하여 잠금 어디서나 모르겠는데 모든 것을 느끼는 자신에 대해 그것에서 작업하 멀티 스레드 환경에 어쨌든지 원래 개발 실제로 하는 방법을 알고 개발하는 멀티스레드 코드,또는 그들은 단지 추가 잠금 문의 모든 곳에서 막는 것을 희망하는 것이 잘?

잠금 해야 주위에 사용되는 코드를 수정하는 공유 상태를 해제하는 상태에 의해 변경 다른 스레드가 동시에,그리고 그 다른 자국을해야합 같은 잠급니다.

잠금 장치가 실제로 메모리 액세스 serializer,스레드(는 잠금)이 기다려야에 잠금을 입력까지 현재 스레드가 종료 잠금,그래서 메모리 액세스는 직렬화됩니다.

을 대답은 당신이 질문에 자물쇠가 필요하지 않습에서 하나의 스레드 응용 프로그램,그리고 그것은 성과 부작용이 있습니다.기 때문에 잠금에서는 C#을 기반으로 커널이 동기화체 및 모든 잠금 당신의 전환이 만들어집하는 커널 모드에서 사용자는 모드입니다.

당신이 관심이 있다면 다중 스레딩에서 성능 시작하기 좋은 장소입 MSDN 스레딩 지침

당신 성능 문제를 잠그는 변수이지만,일반적으로,당신을 구성하는 코드를 최소화하는 시간의 길이 소요되는 내부'고정'블록의 코드입니다.

까지 제거 하는 잠급니다.그것은 것에 따라 정확하게 코드입니다.더라도 그것은 하나의 스레드의 경우 객체를 구현했으로 단일한 당신은 여러 클라이언트를 사용하의 인스턴스(메모리에서,서버에서)동일한 시간에..

네,있을 것입니다 몇 가지 성과 페널티 을 사용할 때 그러나 그것은 일반적으로 neglible 충분히 중요하지 않습니다.

를 사용하여 잠금(또는 다른 상호 배타 문이나 구성)은 일반적으로 필요한 다중 스레드 시나리오 여러 스레드(중 하나에 당신의 자신의 결정 또는에서 호출자)는 기회와 상호 작용하는 개체를 변경하고 근본적인 상태이나 데이터 유지됩니다.는 경우,예를 들어,당신은 컬렉션에서 액세스할 수 있는 여러 쓰레드를 원하지 않는 스레드가 하나의 내용을 변경하는 모음으로 항목을 제거하는 동안 또 다른 스레드에 노력하고 그것을 읽는다.

잠금(토큰)에만 표시하는 데 사용됩 하나 이상의 블록의 코드는 실행되지 않을 동시에서 여러 스레드입니다.응용 프로그램의 경우 하나의 스레드,그것의 보호에 대한 조건 수 없는 존재합니다.

고 잠그는 호출에 성능,추가 지침을 확인하는 동시기 전에 액세스 코드가 실행됩니다.그것만 사용해야 합니다 어디 필요합니다.

질문 에 대해'Mutex'C#.다음 두 개의 에 관한 질문이용의 잠금(Object)'문니다.

포인트가 없는 자물쇠 앱에서만 있는 경우 하나의 스레드 및 그렇다,그것은 성능을 치지만 그것은 공정한 번호의 통화에 대한 명중을 쌓으로는 뭔가 중요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top