문제

나는 모든 곳에서 동시 프로그래밍에 대해 계속 듣고 있습니다. 너희들은 그것이 무엇인지, 그리고 C ++ 새로운 표준이 어떻게 같은 일을 촉진하는지에 대해 약간의 빛을 던질 수 있습니까?

도움이 되었습니까?

해결책

동시성은 코드가 동시에 여러 일을하는 것입니다. 이것은 일반적으로 명백한 "스레드"로 수행되지만 다른 가능성이 있습니다. 예를 들어, 코드에서 OpenMP 지시문을 사용하는 경우 OpenMP를 지원하는 컴파일러가 자동으로 스레드를 생성합니다.

스레드는 "실행 스레드"의 경우 짧습니다. 단일 스레드 C ++ 프로그램에서 실행은 main ()에서 시작한 다음 순차적으로 진행됩니다. 멀티 스레드 프로그램에서 첫 번째 스레드는 메인에서 시작하지만 사용자 지정 기능에서 시작하는 응용 프로그램에 의해 추가 스레드가 시작될 수 있습니다. 그런 다음 동시에 또는 원래 스레드와 병렬로 실행됩니다.

C ++ 0x에서 스레드를 사용하기 시작했습니다 std::thread 수업:

void my_function()
{
    // do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread

새로운 C ++ 0X 표준도 다음을 지원합니다.

  • 원자 값과 작업 std::atomic<> 클래스 템플릿,
  • 데이터 보호를위한 뮤 테스 (std::mutex, std::recursive_mutex, 등.)
  • 잠금 수명을 쉽게 관리하기위한 잠금 클래스 (std::lock_guard<>, std::unique_lock<>)
  • std::lock 그리고 std::try_lock 교착 상태를 위험에 빠뜨리지 않고 동시에 여러 자물쇠 획득을 관리하는 기능
  • 이벤트 대기를 용이하게하기위한 조건 변수 (std::condition_variable, std::condition_variable_any)
  • 스레드 사이의 데이터 전달을 단순화하고 값이 준비되기를 기다리는 선물, 약속 및 패키지 작업. 이것은 클래식 "스레드에서 값을 반환하는 방법"질문을 다룹니다.
  • 로컬 정적 객체의 스레드 안전 초기화
  • 그만큼 thread_local 스레드-로컬 데이터를 선언하는 키워드

Devx.com의 기사에서 새로운 C ++ 0x 스레드 라이브러리에 대한 자세한 개요를 제공했습니다. C ++ 0x에서 더 간단한 멀티 스레딩

C ++의 멀티 스레딩 및 동시성에 대해 글을 씁니다. 내 블로그. 나는 또한 주제에 관한 책을 쓰고 있습니다. C ++ 동시 행동.

다른 팁

"C ++ 새로운 표준이 어떻게 촉진 되는가"동시 프로그래밍을 말할 때, 나는 당신이 곧 (?) C ++ 09 표준에 대해 이야기하고 있다고 가정합니다.

현재 초안 형식으로 서있는 새로운 표준은 동시 프로그래밍에 도움이되는 다음 항목을 지원합니다.

  • 원자 유형 및 주소
  • 스레드 클래스
  • Thread_local Storage (몇 달 전에 표준 초안에 방금 추가되었습니다)
  • 상호 배제 (MUTEX 클래스)
  • 조건 변수 - Win32에서 조건 변수가 올바르게 구현하기가 어렵 기 때문에 Windows에 특히 좋습니다. 이는 결국 Microsoft가 적어도 MSVC ++ 런타임에서 조건 변수를 지원해야하므로 Win32에서 정확한 조건 변수 의미를 쉽게 얻을 수 있습니다.

아마도이 비디오는 당신을 위해 약간의 빛을 비추는 데 도움이 될 것입니다 :-)
http://channel9.msdn.com/posts/charles/the-concurrency-runtime-fine-grain-parallelism-for-c/

동시성은 주어진 프로세스에 대해 여러 실행 스레드를 가지고 있습니다. 오늘날 C ++는 직접 지원하지 않습니다. 그러나 주어진 기능을 새로운 실행 스레드에 묶을 여러 라이브러리가 존재합니다. UNIX 표준은 PTHREADS 라이브러리입니다.

C ++ CSP2- C ++의 쉬운 동시성

http://www.cs.kent.ac.uk/projects/ofa/c++csp/

CSP는 실과 자물쇠와 반대로 적절한 동시 패러다임을 기반으로하며, 사후에 고려되는 다른 모든 방식의 것입니다.

(동시 프로그래밍 언어는 Occam-PI를 참조하십시오 (CSP 기반)

미래의 프로그래밍 패러다임 방향과 관련하여 약간 다른 테이크 :

동시성은 하드웨어가 지원하는 경우 한 번에 여러 가지 작업을 수행 할 수 있도록 프로그램 작성에 관한 것입니다. 현재 대부분의 언어는 프로그래머가이를 지정할 수있는 상당히 무겁고 복잡한 메커니즘을 가지고 있습니다 (예 : 수동 동기화가있는 스레드, OpenMP 사전 프로세서 디렉토리 등).

하드웨어가 향상됨에 따라 수직 (더 빠른 단일 코어)보다는 수평 (더 많은 코어)이 향상 될 것입니다. 즉, 앱은 "더 빠른"하드웨어로 확장하려면 "잠재적 동시성"이 필요하다는 것을 의미합니다. 언어는 현재 미래의 개발을위한 최고의 언어의 위치에 있도록이를 가장 잘 지원하기 위해 진화하려고 노력하고 있습니다.

C ++ 0X는 동시성을 프로그래밍하는 "오래된"방법에 대한 내장 지원을 추가하고 있습니다. 다양한 컴파일러 공급 업체는 스레딩 모델을 추상화하고 스레드 수 등 (기계의 하드웨어를 기반으로)에 대한 런타임 결정을 허용하는 "새로운"방법을 추가하고 있습니다. 특히 Microsoft의 경우 F#, 동시성 런타임, 병렬 확장 등을 참조하십시오.

도움이되기를 바랍니다.

동시 프로그래밍을 이해하는 가장 좋은 기사입니다. 동시 프로그래밍

읽은 후 동시 프로그래밍 및 C ++의 전체 사진을 얻을 수 있습니다.

빠른 요약으로, 우리는 동시 프로그래밍이 멀티 태스킹을하는 것이라고 말할 수 있습니다. 프로그램이 차단되면 다른 일을 할 수 있습니다. 일반적으로 네트워크 연결을 기다리고 I/O를 처리하는 동안 차단됩니다. 우리는 동시 프로그래밍을 사용하여 촉진 할 수 있습니다 fork() 그리고 스레드 라이브러리.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top