원자 잠금 변수를 사용하여 상호 배제를 구현하여 경쟁 조건을 감지하고 극복 할 수 있지만 상호 배제를 구현하지 않고 경쟁 조건을 감지 할 수있는 방법이 있습니까?상호 배제 구현하지 않고 경쟁 조건 감지
상호 배제는 오버 헤드를 크게 증가시킵니다. 따라서 추가적인 오버 헤드없이 경쟁 조건을 극복 할 수있는 방법을 생각하고있었습니다.
원자 잠금 변수를 사용하여 상호 배제를 구현하여 경쟁 조건을 감지하고 극복 할 수 있지만 상호 배제를 구현하지 않고 경쟁 조건을 감지 할 수있는 방법이 있습니까?상호 배제 구현하지 않고 경쟁 조건 감지
상호 배제는 오버 헤드를 크게 증가시킵니다. 따라서 추가적인 오버 헤드없이 경쟁 조건을 극복 할 수있는 방법을 생각하고있었습니다.
동기화가 오버 헤드를 크게 늘릴 필요가 없습니다. 일반적으로 문제를 해결하기위한 비교적 저렴한 방법이 있습니다. 문제가 발생하는 경우 시나리오의 세부 정보와 게시자가 사용하는 동기화 기술을 게시하면 제안 사항을 제시 할 수 있습니다.
동기화의 필요성을 피한다면 실제로 좋은 방법은 없습니다. 동시 프로그래밍에서 다루어야 할 문제입니다. 많은 경우에 여러 스레드를 완전히 필요로하지 않아도되고, 다른 경우에는 가능한 한 스레드를 격리하고 몇 가지 중요 위치에 대한 동기화 필요성을 줄일 수 있습니다. 예를 들어, 많은 경우에 하나의 스레드가 모든 부기 및 데이터 액세스를 담당하는 메시지 스레드 개념을 사용하고 싶습니다. 그런 다음 작업자 스레드는 처리를 위해 동기화 된 대기열을 사용하여이 스레드에 메시지를 게시합니다. 이렇게하면 동기화 된 메시지 큐만 제공하면되고 다른 모든 작업은 독립적으로 진행될 수 있습니다.
희망이 도움이됩니다. 더 구체적인 아이디어/제안을 원하시면 좀 더 자세한 정보를 자유롭게 게시하십시오.
"동기화 된 대기열"에 대한 언급이 더 잘 설명 될 수 있습니다. 메시지 대기열 예제에서 좋은 후보는 LinkedBlockingQueue입니다 - 동기화되지 않은 잠금을 사용합니다. 캐주얼 독자는 대기열 방법 내에서 "동기화"하려고한다고 믿을 것입니다. – javadba
@javadba 좋은 설명, 감사합니다. C#에서는 ['Queue.Synchronized'] (http://msdn.microsoft.com/en-us/library/system.collections.queue.synchronized%28v=vs.110%29.aspx) getter를 사용하여 'Queue' 주위에 스레드 안전 래퍼를 생성하십시오. – TypeIA