thread mutex 예제
출력이 표시되면 두 스레드가 동일한 이전 계정 잔액(Rs 100)을 가지고 있지만 여전히 업데이트 값이 정확하다는 사실에 놀랄 수 있으므로 모두 뮤텍스 :). 뮤텍스는 두 가지 함수를 호출하여 잠금을 해제하고 소멸할 수 있습니다: 첫 번째 함수는 잠금을 해제하고 두 번째 함수는 잠금을 소멸하므로 나중에 아무 데도 사용할 수 없습니다. 은행에 계정 소유자의 온라인 트랜잭션을 관리하는 트랜잭션 처리 시스템이 있으며 트랜잭션 요청이 올 때 이를 제공하는 스레드를 생성하는 하나의 프로세스 실행(계정 소유자 데이터를 글로벌 공유 데이터로 메모리에 로드됨)이 있다고 가정합니다. 프로세스의 스레드가 전역 데이터에 액세스할 수 있으며 동시에 실행할 수 있습니다. 공유 데이터를 동시에 수정하면 데이터 불일치가 발생할 수 있습니다. 우리가 방법을 보자…. 잔액 이 있는 은행 계좌가 있다고 가정해 봅시다. 한 달 의 지출을 충족하기에 충분하지 않습니다, 그래서 당신은 당신의 계정에 돈을 입금하는 아빠와 형제를 물었다. 자, 아빠와 오빠가 동시에 돈을 입금하려 했다고 가정해 봅시다. 요청을 처리하기 위해 서버 프로세스는 각각 하나씩 두 개의 스레드를 생성하여 돈을 입금할 수 있도록 합니다. 가정, 돈을 입금, 스레드 업데이트 계정 잔액 다음과 같이 – 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에 대해 아무것도 이해하지 못했다, 특히 그들을 사용하는 방법. 당신의 예는 기본 사항을 이해하는 데 좋으며 a.t.m.은 어떻게 더 잘 할 수 있는지는 중요하지 않습니다. ? 다음 코드에서 먼저 출력되는 것은 무엇입니까? 우리는 값이 밖으로 영장 될 것입니다 어떤 순서를 모른다. print_i 스레드가 실행되기 전에 주 스레드가 완료되면 죽습니다. 실제 문제는 첫 번째 스레드가 사용 중이거나 사용하려고 할 때 두 번째 스레드에 의한 변수 `counter`의 사용이었습니다. 즉, 공유 리소스 `카운터`를 사용하는 동안 스레드 간의 동기화가 부족하여 문제가 발생하거나 한 단어에서 두 스레드 간의 `동기화 문제`로 인해 이 문제가 발생했다고 말할 수 있습니다. “도움말 – 뮤텍스가 필요해!” 한 스레드가 현재 임계 섹션 내에 있는 경우 첫 번째 스레드가 완료될 때까지 다른 스레드를 기다려야 합니다. 이를 위해 뮤텍스(상호 배제의 약자)를 사용할 수 있습니다. 이제 기본 문제를 이해했기 때문에 해결 방법을 논의할 수 있습니다.
스레드 동기화를 달성하는 가장 인기있는 방법은 Mutexes를 사용하는 것입니다. @chmurli이 기사에서는 mutex를 사용하는 스레드 동기화에 대해 설명하므로 뮤텍스를 사용하는 방법에 대한 작은 예제를 제공했습니다. 나는 코드의 중요한 섹션에서 mutex를 사용했으며 이것이 잘못되었다고 생각하지 않습니다. Grossomodo les mutex servent à gérer les threads pour qu`il n`y a pas ce qu`on appelle interférence entre deux threads ou chevauchement.