뮤텍스 예제

August 2, 2019 at 7:27 pm

나는 이것이 정말 좋은 예라고 생각했다!!! 감사합니다 히만슈와 배드 보이 !!! chmurli는 스레드가 실제 세계에서 사용되는 방법에 대한 보다 실용적이면서도 간결한 예를 쓰고 싶습니다. 내 이해는 Mutexes는 카운터 또는 무엇이든, 글로벌 리소스를 잠그고 스레드는 it….so 사용하기 위해 예제에 지정된 대로 리소스를 잠글 필요가 있다는 것입니다. 사실이것은 스레드가 뮤텍스를 구현하는 방법입니다…. 예를 따라 뮤텍스의 위험을 다룰 수 있습니다. 교착 상태 및 같은 … Pthread의 오라일리 책은 훌륭한 일을합니다…. 간단한 예제에서 추가 해야 하는 코드의 가장 작은 양은 세 줄: (고급 참고: 올바른 옵션으로 만든 하 고 공유 메모리 세그먼트를 사용 하는 경우 자식 및 부모가 뮤 텍스를 공유 할 수 있도록 공유 메모리를 사용 하 여 고급 옵션이 있습니다. 스택오버플로우 예제 참조) 이 강의에서는 스레드가 어떻게 만들어지는지, 공유 resouce에 대해 뮤텍스를 사용하여 상호 제외를 구현하는 방법을 설명하기 위해 여러 가지 간단한 코드 예제를 살펴보겠습니다. 이 노트는 철저한 것을 의미하지 않는다 – 그들은하지 않습니다.

스레드 동기화 문제 동기화 문제를 연구하는 예제 코드 : 잠금이 하나만 있는 경우 불필요한 두 스레드 간의 잠금에 대한 중요한 경합이 있을 수 있습니다. 예를 들어 두 개의 스레드가 서로 다른 두 카운터를 업데이트하는 경우 동일한 잠금을 사용할 필요가 없을 수 있습니다. 이 예제는 완전히 나쁘다! 이 방법으로 뮤텍스를 사용하면 스레드를 쓸모없이 만들 수 있습니다! 따라서 이번에는 두 작업의 시작 및 완료 로그가 있습니다. 그래서 스레드 동기화는 Mutex를 사용하여 일어났습니다. 이 예제에서는 두 스레드 간에 공유되는 std::map을 보호하기 위해 뮤텍스를 사용하는 방법을 보여 주십습니다. 이 기사주셔서 감사합니다! 난 그냥 내 강의의 스크립트를 읽고 실제로 Mutexes에 대해 아무것도 이해하지 못했다, 특히 그들을 사용하는 방법. 당신의 예는 기본 사항을 이해하는 데 좋으며 a.t.m.은 어떻게 더 잘 할 수 있는지는 중요하지 않습니다. 😀 스레드의 동기화가 잘못 될 수있는 방법에 대한 예제를 찾고 있었습니다. 내 프로그래밍 책은 `조심`나에게 말하지만, 내 자신의 콘솔에서 잘못 보고 훨씬 더 재미있다.

당신이 제공 한 코드는 내가 찾고 있던 정확히, 그래서 감사합니다! 안녕하세요 여러분, qemu에서 코드를 실행하고 더 많은 스레드를 추가하려고합니다. 예를 들어 5 개의 스레드를 추가하고 조인합니다. 그러나 그것은 작동하지 않습니다, 아무도 나를 도울 수 있습니까… jeff@jeff-VirtualBox:~/팔-강의-내/팔-강의/실험실-2$ 깨끗 하 게; qemu rm -f atomic.o mutex.o 원자 팔 리눅스-gnueabihf-gcc -c-pthread-정적-o atomic.o atomic.o atomic.c arm-linux-gnueabihf-g cc -c -pthread -o mutex.o mutex.o mutex.o arm-linux-gnueabihf-gc -pthread -static-o atomic.o mutex.o qemu-arm ./atomic 만들기 스레드 0 확인 @chmurli이 문서는 mutex를 사용하여 스레드 동기화를 말하고 따라서 나는 뮤텍스를 사용하는 방법에 대한 작은 예를 주었다. 나는 코드의 중요한 섹션에서 mutex를 사용했으며 이것이 잘못되었다고 생각하지 않습니다. 상기 코드의 일반적인 출력은 ARGGGH 합계가 8140268이며 경주 조건이 있기 때문에 프로그램이 실행될 때마다 다른 합계가 인쇄됩니다. 코드는 두 스레드가 동시에 읽기 – 쓰기 합계를 중지하지 않습니다. 예를 들어 두 스레드모두 각 스레드를 실행하는 CPU에 sum의 현재 값을 복사합니다(123을 선택해 보겠습니다). 두 스레드 모두 복사본에 대해 하나씩 증분합니다. 두 스레드 모두 값(124)을 다시 씁니다.