thread mutex 예제

«도움말 – 뮤텍스가 필요해!» 한 스레드가 현재 임계 섹션 내에 있는 경우 첫 번째 스레드가 완료될 때까지 다른 스레드를 기다려야 합니다. 이를 위해 뮤텍스(상호 배제의 약자)를 사용할 수 있습니다. 뮤텍스가 초기화되고 다음 두 함수를 호출하여 잠금이 달성됩니다: 뮤텍스는 배타적이고 재귀적이지 않은 소유권 의미 체계를 제공합니다: pthread_mutex_lock(뮤텍스): 뮤텍스가 잠금 해제되면 이 함수는 pthread_mutex_ 때까지 뮤텍스를 잠급드립니다. 잠금 해제(뮤텍스)가 호출되고 반환됩니다. 그렇지 않으면 잠금이 해제될 때까지 차단됩니다. 은행에 계정 소유자의 온라인 트랜잭션을 관리하는 트랜잭션 처리 시스템이 있으며 트랜잭션 요청이 올 때 이를 제공하는 스레드를 생성하는 하나의 프로세스 실행(계정 소유자 데이터를 글로벌 공유 데이터로 메모리에 로드됨)이 있다고 가정합니다. 프로세스의 스레드가 전역 데이터에 액세스할 수 있으며 동시에 실행할 수 있습니다. 공유 데이터를 동시에 수정하면 데이터 불일치가 발생할 수 있습니다. 우리가 방법을 보자…. 잔액 이 있는 은행 계좌가 있다고 가정해 봅시다. 한 달 의 지출을 충족하기에 충분하지 않습니다, 그래서 당신은 당신의 계정에 돈을 입금하는 아빠와 형제를 물었다.

자, 아빠와 오빠가 동시에 돈을 입금하려 했다고 가정해 봅시다. 요청을 처리하기 위해 서버 프로세스는 각각 하나씩 두 개의 스레드를 생성하여 돈을 입금할 수 있도록 합니다. 가정, 돈을 입금, 스레드 업데이트 계정 잔액 다음과 같이 – 1. 올드 밸런스 = 귀하의_account.balance 2. 뉴 밸런스 = 올드 밸런스 + 예치금액 3. 당신의_account.balance = 뉴 밸런스 지금 당신의 아버지와 형제의 경우 그들은 두 스레드가 OldBalance = 100을 취할 수 있도록 동시에 돈을 입금하기 시작했다. 두 스레드 모두 뉴밸런스를 스레드(1) 뉴밸런스 = 100 + 10000 ———> 아빠가 기탁한 Rs. 10000으로 별도로 계산합니다.

스레드 (2) 뉴 밸런스 = 100 + 5000 ——-> 형제는 Rs. 5000을 기탁했다. 이제 thread(2)가 계정 잔액을 Rs. 5100으로 업데이트하고 그 스레드(1) 직후계정 잔액을 Rs. 10100으로 업데이트한다고 가정합니다. 따라서 최종 계정 잔액은 Rs. 10100입니다. 행복???? 아마 아닐 거예요. 그래서, 실제로, 당신의 형제에 의해 입금 된 돈은 귀하의 계정에 적립되지 않았습니다.

이것이 우리가 동기화 메커니즘을 필요로하는 이유입니다. 프로세스는 하나 이상의 스레드로 구성됩니다(주 함수를 생각). 다중 스레드 코드는 더 많은 스레드를 생성합니다. Mutexes는 데이터 손상/ 예기치 않은/ 원치 않는 동작을 피하기 위해 공유 리소스 주위에 잠금을 만드는 데 사용됩니다. 기본적으로 비동기 설정에서 순차적 실행을 제공합니다 – 공유 데이터 구조에 대한 비 const 비 원자성 작업에서 비롯된 요구 사항입니다. 이 예제에서는 두 개의 스레드(작업)가 만들어지고 이러한 스레드의 시작 함수에서 시작되고 완료될 때 작업 번호에 대한 로그를 얻기 위해 카운터가 유지됩니다. 그러나 단순히 많은 잠금을 만드는 것만으로는 충분하지 않습니다: 예를 들어 한 스레드가 업데이트되는 동안 두 개의 데이터 구조를 읽을 수 없고 일시적으로 일관성이 없는 상태에서 중요한 섹션에 대해 추론할 수 있어야 합니다. (고급 참고: 올바른 옵션으로 만들고 공유 메모리 세그먼트를 사용하는 경우 자식과 부모가 뮤텍스를 공유할 수 있도록 하는 공유 메모리를 사용하는 고급 옵션이 있습니다.

스택오버플로우 예제 참조) 이번에는 두 작업의 시작 및 완료 로그가 있습니다. 그래서 스레드 동기화는 Mutex를 사용하여 일어났습니다. 위의 의사 코드를 사용하면 뮤텍스가 잠금 해제되지 않은 경우 프로세스 B가 sharedResource에 액세스 할 수 있습니까? 아래코드 스니펫은 뮤텍스 잠금 해제 개념을 이해하는 데 도움이 됩니다. 코드에서 드라이 런을 시도합니다. (또한 대기 시간과 프로세스 시간을 변경하여 이해를 구축 할 수 있습니다). 나는 이것이 정말 좋은 예라고 생각했다!!! 감사합니다 히만슈와 배드 보이 !!! chmurli는 스레드가 실제 세계에서 사용되는 방법에 대한 보다 실용적이면서도 간결한 예를 쓰고 싶습니다. 내 이해는 Mutexes는 카운터 또는 무엇이든, 글로벌 리소스를 잠그고 스레드는 it….so 사용하기 위해 예제에 지정된 대로 리소스를 잠글 필요가 있다는 것입니다.

  • Información

    • Últimas Entradas

      가우스 법칙 예제

      «도움말 – 뮤텍스가 필요해!» 한 스레드가 현재 임계…

      피벗 예제

      «도움말 – 뮤텍스가 필요해!» 한 스레드가 현재 임계…

      페르미 추정 예제

      «도움말 – 뮤텍스가 필요해!» 한 스레드가 현재 임계…