2017-10-20 11 views
0

저는 C++에서 Producer-consumer problem을 연구하고 있는데 OpenMP를 사용할 때 모니터를 구현하는 방법은 무엇입니까?OpenMP를 사용하여 C++로 모니터를 구현하는 방법은 무엇입니까?

OpenMP에서 conditional_variable과 같은 항목을 찾을 수 없어 위키 피 디아 예제와 같은 특정 조건에 대해 대기/알림을 구현할 수 없습니다.

+0

내가 P-C에 맞지 않는 OpenMP에서 P-C 문제를 어떻게 수행하는지 더 자세히 알려주십시오. – Surt

+0

정확히 무엇을하고 싶습니까? OpenMP 구문 만 사용하여 조건 변수를 구현할 수 있는지 알아보기위한 학습 활동입니까? STL 조건 변수가없는 고대 시스템을 사용해야합니까? STL에 대해 들어 본 적이 없었습니까? 조금 입력하십시오. –

답변

-1

OpenMP가 조건 변수를 사용할 수있는 방법을 제공하지 않는다고해서 특정 용도에 맞지 않는다고 생각합니다.

OpenMP는 조건부 변수에 대한 구조를 제공하지 않습니다. 그 목적은 다중 스레드 과학 응용 프로그램에 더 적합합니다. 여기서 문제는 작은 조각으로 나누고 스레드에 대해서는 정확하게 생각하지 않습니다. 동기화가 OpenMP의 런타임 라이브러리에 의해 처리되므로

일부 구현에서는 pthread를 백엔드로 사용하기 때문에 pthread_cond 제품군 함수를 사용하여 해결할 수 있습니다. 그러나 이것은 동일한 도구의 다른 버전을 사용하는 경우에도 이식 할 수 없을 가능성이있는 스레드가 작성되고 결합되는 방식을 제어 할 수 없기 때문에 교착 상태가 발생하기 쉽습니다.

귀하의 경우에는 제작자 고객 대기열을 구현하는 데 필요한 모든 것을 이미 포함하고있는 C++ 표준 스레드 라이브러리를 사용합니다. 여전히 병렬 프로그래밍 프레임 워크를 고수하고 싶다면 이미 Intel Thread Building Blocks를 살펴보십시오.이 스레드는 이미 이런 유형의 Concurrent Queues을 구현하고 있습니다.

+0

나는 완전히 동의하지만 "하지 마라"는 질문에 대한 대답이 아닙니다. 질문은 대답하기에 너무 크다. –

+0

충분히 명확하지 않을 수도 있지만 제 답변은 "OpenMP에서 완전히 할 수 없으며 다른 옵션을 사용하는 것이 더 좋습니다"라고 대답했습니다. 의견을 주셔서 감사합니다. 나는 그것을 명확히하기 위해 답을 업데이트 할 것이다. –

+0

OpenMP에서 mutex 및 조건 변수를 완벽하게 구현할 수 있다고 생각하지만 시도하지는 않습니다. –