내 응용 프로그램에 두 개의 스레드가 있습니다. 스레드를 잠자 지 않고 두 스레드를 동시에 실행할 수 있습니까?병렬 스레드 C
병렬 스레드 C
답변
다른 언급했듯이 여러 코어를 사용할 수도 있지만 운영 체제가 스레드를 배포하기로 결정한 방법에 따라 다릅니다. 각 스레드가 실행되는 위치를 지정하는 데 내가 본 제어가 없습니다.
좋은 설명과 그림으로,이 페이지에서 POSIX 라이브러리를 사용하여 멀티 스레딩을 수행하는 방법에 대한 코드를 볼 수 있습니다.
http://www.pathcom.com/~vadco/parallel.html
수면 시간 슬라이스는 두 개의 스레드가 밀리 초마다 계산하고, 두 사람이 동일한 경우 보이기 시작, 그래서 당신의 최선의 방법은 예를 들어, 그것을 테스트하는 것입니다, 볼 어렵다. 그들이 그렇지 않다면, 적어도 하나는 cpu에 의해 잠들 것입니다.
대부분의 경우 잠시 후 잠을 자고 테스트는 두 스레드간에 얼마나 많은 차이가 있는지 확인하는 것입니다.
하나의 스레드가 데이터 전송을 기다리거나 수신을 기다리면 다른 스레드가 실행될 수 있도록 잠자기 상태가되어 OS가 모든 것이 제대로 작동하도록 계속 진행할 수 있습니다.
일부 플랫폼에서는 Windows의 SetThreadAffinityMask() 및 Linux의 sched_setaffinity()와 같은 선호도 API를 사용하여 각 스레드가 실행되는 위치를 제어 할 수 있습니다. – bk1e
@ bk1e - 감사합니다. 들어 본 적이 없지만 스케줄링 할 때 OS를 덮어 쓰고 싶을 때 좋습니다. –
@ bkl1e - MSDN에서 : 프로세스 또는 스레드에 대한 선호도 마스크를 설정하면 시스템에서 특정 프로세서에서 스레드를 실행하지 못하도록 제한되어 스레드의 프로세서 시간이 단축 될 수 있습니다. 대부분의 경우 시스템에서 사용 가능한 프로세서를 선택하도록하는 것이 좋습니다. –
예, 다중 프로세서 또는 다중 코어 프로세서가있는 경우 예. 하나의 스레드가 하나의 코어에서 실행됩니다.
스레드가 다른 프로세서 나 코어에서 실행되지 않을 수도 있습니다. 둘 이상이 있어도. –
사실 일 수도 있지만, 단일 코어 머신에서는 하나의 스레드 만 실행됩니다 (하이퍼 쓰레드는 무시합니다 - 적어도 의사 멀티 코어 머신이되도록합니다). 멀티 코어 머신에서는 스레드가 실제로 동시에 실행될 가능성이 있지만 보장 할 수는 없습니다. –
C 자체는 멀티 스레드 코드를 수행 할 수있는 방법이 없습니다.
그러나, POSIX는이 주제에 대한
하나 개의 좋은 기사는 How to write multi-threaded software in C and C++이다 C.
에서 스레드로 작업 할 수 있도록 라이브러리를 가지고있다.OS의 대부분은 멀티 스레딩을위한 라이브러리도 제공합니다. 윈도우의 C에서는 _beginthreadex()를 사용하여 응용 프로그램 또는 CreateThread의 스레드를 만들 수 있습니다. 그러나 _beginthreadex()가 선호됩니다. –
특히 입력 또는 조건에 대해 서로 기다리지 않는 경우 응용 프로그램에서 스레드를 병렬로 실행할 수 있습니다. 예 : 하나의 스레드가 파일을 구문 분석하고 다른 스레드가 응용 프로그램에서 노래를 재생 중일 수 있습니다.
일반적으로 OS는 스레드 타임 슬라이싱을 처리합니다. 그래서 응용 프로그램 수준에서는 이러한 스레드가 병렬로 실행되는 것처럼 보이지만 OS는 각 스레드에 특정 실행 시간을주는 시간 분할을 수행합니다.
멀티 코어 프로세서/코어를 사용하면 실시간으로 스레드를 병렬로 실행할 수 있지만 OS는 병렬로 실행하려는 스레드를 보장하기 위해 더 낮은 레벨에서 특별히 코딩하지 않으면 어떤 스레드를 실행할 것인지 결정합니다.
+1 여러 코어 언급. –
질문을 좀 더 자세하게 작성하거나 적어도 시도하려는 코드 스 니펫을 포함하십시오. – chakrit
네, 실제 CPU가 두 개인 경우 –
테스트 질문과 같은 소리가나요? 숙제? –