c 뮤텍스 예제

나는 이것이 정말 좋은 예라고 생각했다!!! 감사합니다 히만슈와 배드 보이 !!! chmurli는 스레드가 실제 세계에서 사용되는 방법에 대한 보다 실용적이면서도 간결한 예를 쓰고 싶습니다. 내 이해는 Mutexes는 카운터 또는 무엇이든, 글로벌 리소스를 잠그고 스레드는 it….so 사용하기 위해 예제에 지정된 대로 리소스를 잠글 필요가 있다는 것입니다. 사실이것은 스레드가 뮤텍스를 구현하는 방법입니다…. 예를 따라 뮤텍스의 위험을 다룰 수 있습니다. 교착 상태 및 같은 … Pthread의 오라일리 책은 훌륭한 일을합니다…. 이 예제에서는 두 개의 스레드(작업)가 만들어지고 이러한 스레드의 시작 함수에서 시작되고 완료될 때 작업 번호에 대한 로그를 얻기 위해 카운터가 유지됩니다. 간단한 예제에서 추가해야 하는 코드의 가장 작은 양은 세 줄에 불과합니다. 예를 들어 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 확인 만들기 이것이 끔찍한 예라고 말하는 모든 사람에게 이것이 실제로 무엇이었는지 알 수 없습니다. 그는 이것이 멀티 스레드로 추정되는 곳이라고 말하지 않았습니다. 그것은 내가 단일 차선 다리 문제를 해결하는 데 도움이. 중요한 섹션이 없는 여러 스레드(또는 다중 스레드)에서 이 문제를 수행해 보십시오. 내가해야 할 일과이 사람의 유일한 차이점은 스레드, 다른 함수의 한 가지 추가 배열이며 카운터 대신 char *를 사용했습니다. 이제 기본 문제를 이해했기 때문에 해결 방법을 논의할 수 있습니다. 스레드 동기화를 달성하는 가장 인기있는 방법은 Mutexes를 사용하는 것입니다. @engeland: 전역 변수를 사용하는 것이 잘못된 이유는 무엇입니까? 프로그래머가 나쁜 관행이라고 해서 뮤텍스로 보호할 수 있는 리소스의 나쁜 예가 아니라는 의미는 아닙니다. 히만슈가 정적 변수를 사용해야 하는가? 그는 할 수 있지만 다음 초보자에게 더 이해할 수있는 코드가 될 것인가? 아니요. 그리고 이것이 예제의 핵심입니다. 가능한 한 간단하게 만드십시오.

다른 한편으로는 전역 변수가 잘못된 프로그래밍 습관이라고 언급되었을 수도 있습니다. @chmurli: 전역 변수와 동일하면 단일 스레드 코드에 대한 주석이 표시됩니다. 이것은 뮤텍스 동기화의 총 단순화입니다. 전체 코드는 중요한 섹션의 일부이므로 보호됩니다. 이 경우는 물론 직렬로 작동합니다. pthread_mutex_lock 전에 또는 pthread_mutex_unlock 후 아무것도 추가하면 좋은 멀티 스레드 프로그램이 있습니다. @Himansu:이 좋은 예주셔서 감사합니다. 이 강의에서는 스레드가 생성되는 방법과 공유 resouces에 대해 뮤텍스를 사용하여 상호 제외를 구현하는 방법을 설명하기 위해 코드의 몇 가지 간단한 예제를 살펴보겠습니다. 이 노트는 철저한 것을 의미하지 않는다 – 그들은하지 않습니다.