qwaitcondition 예제

By August 2, 2019Uncategorized

이 예제에 제시된 생산자-소비자 모델을 사용하면 매우 동시다영적인 다중 스레드 응용 프로그램을 작성할 수 있습니다. 다중 프로세서 컴퓨터에서 프로그램은 버퍼의 다른 부분에서 동시에 두 스레드를 활성화할 수 있기 때문에 동등한 뮤텍스 기반 프로그램보다 최대 두 배 빠릅니다. 멀티 스레딩은 주제에 전념 많은 책과 함께 큰 주제입니다, 예를 들어, 스레드 프라이머: 빌 루이스와 다니엘 J. 버그에 의해 멀티 스레드 프로그래밍 가이드 (프렌티스 홀, 1995) 및 그레고리에 의해 멀티 스레드, 병렬 및 분산 프로그래밍 앤드류스 (애디슨 웨슬리, 2000). 여기서는 다중 스레드 프로그래밍의 기본 을 이미 이해하고 있다고 가정하므로 스레딩 자체가 아닌 다중 스레드 Qt 응용 프로그램을 개발하는 방법을 설명하는 데 중점을 둡니다. 실제로 작업 예제를 얻으려면 외부에서 처리 취소, 큐의 빈점 에 대한 알림 및 T *형식의 항목에 대한 일부 메모리 관리와 같은 논리를 더 추가할 수 있습니다. 스레드의 목적은 코드를 병렬로 실행할 수 있도록 하는 것이지만 스레드가 중지되고 다른 스레드를 기다려야 하는 경우가 있습니다. 예를 들어 두 스레드가 동일한 변수에 동시에 쓰려고 하면 결과가 정의되지 않습니다. 스레드가 서로를 기다리도록 강요하는 원칙을 상호 배제라고 합니다. 데이터와 같은 공유 리소스를 보호하는 일반적인 기술입니다. Qt는 스레드 동기화를 위한 상위 수준 메커니즘뿐만 아니라 하위 수준 프리미티브를 제공합니다. stop() 함수는 중지된 변수를 true로 설정하여 run()을 지시하여 콘솔에 텍스트 인쇄를 중지합니다.

이 함수는 언제든지 모든 스레드에서 호출할 수 있습니다. 이 예제에서는 bool에 할당하는 것이 원자성 작업이라고 가정합니다. 이것은 bool이 두 개의 상태만 가질 수 있다는 점을 고려하면 합리적인 가정입니다. 이 섹션의 후반부에서는 QMutex를 사용하여 변수에 할당하는 것이 원자성 작업임을 보장하는 방법을 살펴보겠습니다. 사용자가 종료를 클릭하거나 창을 닫으면 실행 중인 스레드가 중지되고 QCloseEvent::accept()라고 부르기 전에 실행 중인 스레드가 완료될 때까지 기다립니다(QThread::wait()). 이렇게 하면 이 예제에서는 실제로 중요하지 는 않지만 응용 프로그램이 깨끗한 상태로 종료됩니다. GitHub의 Xpiks에서 사용되는 생산자-소비자 구현의 전체 예제를 확인할 수 있습니다. 뭔가 명확하지 않은 경우에 언제든지 질문을 주시기 바랍니다.

세 스레드가 깨어나는 순서는 정의되지 않습니다. 또한 키를 누를 때 일부 스레드가 do_something()에 있는 경우 조건 변수를 기다리지 않으므로 잠에서 깨어날 수 없으므로 해당 키 누에 대해 작업이 수행되지 않습니다.