2009-11-10 3 views
10

저는 Stack Overflow 초보자입니다. C/C++에서 유닉스 플랫폼을 연구 중이다. 이와 관련하여 기본 프로그래밍을 알고 있다면 multithreading부터 어떻게 시작할 수 있습니까?멀티 스레드 프로그래밍을 사용하려면 어떻게해야합니까?

멀티 스레딩이 매우 흥미로운 것 같아서 이런 점에서 내 지식을 키우고 싶습니다.

어떻게하면 멀티 스레딩을 시작할 수 있으며 가능한 한 빨리 컨셉을 잡을 수있는 최고의 기술/서적/전자 책/기사는 무엇입니까?

+1

다음은 좋은 답변입니다. 나는 당신이 "이 API를 사용하여 톤을 얻게 될지 걱정했다. 그것은 zeh beeeeeeeeessst이다 !!" 하지만 여기서 가장 중요한 요지는 여기서 반복 할 것입니다. 사용 된 API는 무의미합니다. 대부분의 개념은 API에 관계없이 적용됩니다. 아래에 게시 된 리소스 중 일부를 읽으십시오. parallize 할 수 있다고 생각되는 문제를 선택하고 시도하십시오. –

+1

무엇을 하든지 ** 고수준 ** API로 시작하십시오. 그것이 어떻게 작동 하는지를 배우기 직전에 물건을 어떻게하는지 배우십시오. 어떤 지점까지 –

+0

@static_rtti? 교착 상태 및 상호 배제의 기본 사항을 이해하는 것은 피할 수 없습니다. 일부 하위 API는 일단 모니터 범위를 입력하면 모든 잠금을 수행하는 상위 레벨 API보다 이러한 이해를 용이하게합니다. 나는 그것이 높거나 낮은 수준인지에 대해 걱정하지 않고, 당신에게 가장 이해력이있는 것으로 시작하는 것이 좋습니다. 또한, 당신이 세부 사항을 알기 전까지는 당신이 그것을 올바르게하는 법을 알지 못한다고 말하는 사람들이있을 것입니다. 귀하의 의견은 정말 도움이되지 않았습니다. –

답변

1

나는 위키 피 디아 기사 Multithreading 당신에게 빠른 개요를 제공한다고 생각하고, 외부 링크를 따라 당신은 주제의 좋은 개요를 얻을 수 있습니다. 그 후 또는 추가적으로 Tanenbaum의 Operating Systems: Design and Implementation (훌륭한 책)을 읽을 수 있습니다. 하지만 내 생각에 가장 중요한 것은 손을 들어야한다는 것입니다. 따라서 샘플 응용 프로그램을 다운로드하십시오 ... The Code Project 또는 다른 웹 사이트에서 찾아서 사용할 수 있습니다. 자물쇠를 사용하면 응용 프로그램이 어떻게 달라지는 지 알 수 있습니다. 두 스레드가 동일한 자원에 액세스하려고 할 때 발생하는 상황과 이것이 발생하는 빈도 등을 확인하십시오. 그렇게 생각하면 빨리 처리 할 수 ​​있습니다. 그리고 자신에게 익숙하지 않은 기술로 평가하고 놀아 보는 것도 재미 있습니다. ,

  1. 어떻게 사용할 수있는 API (pthread와)

학습 멀티 스레드 프로그래밍은 어렵 사용 방법 멀티 스레딩 애플리케이션

  • 쓰기 : 멀티 스레딩 프로그래밍을 학습

  • 6

    은 두 부분으로 thre은 기본 원칙을 이해하는 데 도움이되는 Linux Journal에 게시 된 좋은 기사입니다.

    더 나은 내가이 튜토리얼을 읽어 보시기 바랍니다의 pthreads 이해하기 -라는 O'rielly하여 좋은 책도 POSIX Threads Programming

    있습니다을 PThreads Programming

    +0

    O'Rielly 서적에 동의합니다 ... C++의 세부 사항 중 일부를 돕기 위해 프레임 워크를 사용 했음에도 불구하고 그것을 읽음으로써 멀티 스레드 프로그래밍에 대한 이해를 명확히했습니다. –

    0

    어쩌면 약간의 논란,하지만 난에 시도 할 때 정말 나를 위해 cklicked 멀티 스레딩 한번 코딩 퍼즐을 풀어 라.

    퍼즐은 뮤텍스를 사용하지 않고 스레드 안전 코드를 작성하는 것이 었습니다. 첫 번째 시도는 비참했지만 결국 마침내 얻었을 때 자전거를 타는 법을 배우는 것과 같았습니다. 그 이후로 동시성에 대해 확신 할 수 없었습니다.

    때때로 나는 주제에 관한 책을 읽은 프로그래머를 우연히 만났지만 원시적 인 임무는 종종 원자 적 조작이 아닐 수도 있다는 사실과 같은 간단한 것을 이해하지 못한다.

    +0

    "원시 할당은 때때로 원자 연산이 될 수 없습니다." 많은 사람들이 코드에 쓰여있는대로 순서대로 실행되지 않을 수 있으며 컴파일러가 순서를 재지 정하여 복잡성을 일으킬 수 있음을 잘 모릅니다.이 점에 대해 Herb Sutter, Scott Meyers & Andrei Alexandrescu의 계몽 기사가 마음에 듭니다. – Modicom

    +0

    퍼즐 솔루션은 잠금이없는 디자인 이었습니까? 아니면 뮤텍스 (AKA dijkstra)가 아닌 잠금 메커니즘 (예 : Dekker의 알고리즘)을 사용 했습니까? 잠금없는 유형의 솔루션 인 경우 문제와 솔루션을 어떻게 든 게시 하시겠습니까? –

    +0

    @San Jancinto : 퍼즐에 대한 자세한 내용을 기억하지 못합니다. 나는 또한 그것을 회고하지 않는 것을 후회한다, 이것은 대략 8-9 년 전에이고 게시 된 공개 토론은 더 이상 존재하지 않는다. – sharkin

    0

    모든 것이 목표에 달려 있습니다. POSIX 스레드 프레임 워크를 기반으로 해결 된 공통적 인 멀티 스레딩 문제가있는 많은 코드와 기사가 있습니다 (여기에 좋은 기사가 많이 있습니다).주요 질문은 당신이 무엇을 만들고 싶은가입니다. 일부 작업의 경우 멀티 스레딩을 권장하지 않습니다.

    토론 주제와 관련되어 있고 추천하고 싶은 책 "Foundations of Multithreaded, Parallel, and Distributed Programming"이 있습니다. 가장 중요한 이점은 '비교적 읽기 쉽다'는 스타일이지만 POSIX 스레드 이데올로기와는 전혀 연계가 없다는 것이 공통적 인 문제이다. http://www.threadingbuildingblocks.org 당신이 멀티 스레딩과 함께 시작하는 경우

    0

    뭔가하려고합니다. 블로킹과 비 블로킹 I/O, 신호, 비동기식 루틴, 콜백 등을 이해합니다. I/O는 아마 하나가 아닌데, 프로그램에 멀티 스레딩을 추가하는 이유입니다. 그 지식으로 pthreads 또는 java 스레드에 관한 책을 선택하거나, Boost 쓰레드 라이브러리 또는 여러분이 좋아하는 기술을위한 다른 쓰레드 라이브러리를 마음껏 사용할 수 있습니다.

    2

    , 내 조언은 첫 번째 리뷰를 작성하는 것입니다 더 나은 시스템에 I/O를 이해 : 다른

    0

    UNIX이기 때문에 프로세스 및 IPC 통신으로 시작하지 않으시겠습니까? 즉 메시지 큐, 공유 메모리 및 뮤텍스를 포함한다.

    0

    저수준 동시성을 이해하려면 다양한 라이브러리 프레임 워크와 O/S 기능을 연구하는 것이 좋습니다. 짧은 시간 내에 동시 코드 작성을 시작할 수있는 예제가 있습니다.

    교착 상태 및 공유 메모리 손상 문제를 해결 한 후에는 동시성 문제를 추론하고 분해하기위한 도구가 필요합니다. 나는 개인적으로 Herb Sutter의 The Pillars of Concurrency 기사를 시작점으로 삼고 있습니다. 아이디어는 동시성이 필요한 이유를 더 잘 이해하는 것입니다. 향상된 응답 시간, 병렬 계산, 이유의 조합을 찾고 있습니까?

    "이유"를 이해하면 더 나은 "무엇"으로 이어질 것입니다. 거기에서 다른 저수준 접근 방식으로 항상 거미 수 있습니다 : Active Objects, monitor objects, , etc. 당신이 말했듯이,이 분야에서 알아야 할 것이 많습니다.

    1

    이 내용은 매우 유용하고 명확하게 작성된 tutorial입니다. 희망이 도움이됩니다.

    관련 문제