간단한 예제에서 추가해야 하는 코드의 최소 양은 세 줄에 불과합니다. 내 프로그래밍 책은 `조심`나에게 말하지만, 내 자신의 콘솔에서 잘못 보고 훨씬 더 재미있다. 당신이 제공 한 코드는 내가 찾고 있던 정확히, 그래서 감사합니다! 나는이 예제를 읽은 후 스레드, Mutexes에 완전히 새로운, 나는 MUTEX의 기본 및 사용 사례를 얻었다. 이 지식으로, 나는 다른 Mutex 응용 프로그램을 이해할 수 있다고 생각합니다. 이것이 끔찍한 예라고 말하는 모든 사람들에게, 당신은 이것이 정말로 무엇을 생각했는지 를 볼 수 없습니다. 그는 이것이 멀티 스레드로 추정되는 곳이라고 말하지 않았습니다. 그것은 내가 단일 차선 다리 문제를 해결하는 데 도움이. 중요한 섹션이 없는 여러 스레드(또는 다중 스레드)에서 이 문제를 수행해 보십시오. 내가해야 할 일과이 사람의 유일한 차이점은 스레드, 다른 함수의 한 가지 추가 배열이며 카운터 대신 char *를 사용했습니다. 상기 코드의 일반적인 출력은 ARGGGH 합계가 8140268이며 경주 조건이 있기 때문에 프로그램이 실행될 때마다 다른 합계가 인쇄됩니다. 코드는 두 스레드가 동시에 읽기 – 쓰기 합계를 중지하지 않습니다. 예를 들어 두 스레드모두 각 스레드를 실행하는 CPU에 sum의 현재 값을 복사합니다(123을 선택해 보겠습니다).

두 스레드 모두 복사본에 대해 하나씩 증분합니다. 두 스레드 모두 값(124)을 다시 씁니다. 스레드가 다른 시간에 합계에 액세스했다면 개수는 125였을 것입니다. 위의 예제는 정적으로 선언된 `카운터` 변수를 잘 작동합니다. 나는 gcc를 사용하여 예제를 실행할 때. 적어도 변수증설과 비교하여 뮤텍스를 백만 번 잠그고 잠금을 해제하기 때문에 이 프로세스가 느리게 실행됩니다. (그리고이 간단한 예에서 우리는 정말 스레드가 필요하지 않았다 – 우리는 두 번 추가 할 수 있습니다!) 더 빠른 다중 스레드 예제는 자동(local) 변수를 사용하여 백만 을 추가한 다음 계산 루프가 완료된 후에 공유 합계에 추가하는 것입니다. 이 강의에서는 스레드가 생성되는 방법과 공유 resouces에 대해 뮤텍스를 사용하여 상호 제외를 구현하는 방법을 설명하기 위해 코드의 몇 가지 간단한 예제를 살펴보겠습니다. 이 노트는 철저한 것을 의미하지 않는다 – 그들은하지 않습니다. @engeland “글로벌 변수는 mutexes에 의해 보호되어야하는 제한된 자원에 대한 나쁜 예입니다” 당신은 당신의 문을 정당화하시기 바랍니다 수 있습니까? 예는 좋은 악마입니다.