2011-10-20 1 views
2

1 인스턴스로 시작하여 5fps에 도달 할 때까지 성장할 장난감 앱을 작성하고 싶습니다. 인스턴스에는 실행에 < 1ms가 걸리는 run() 메서드가 있습니다. 그래서 실제 스레드 대신 직렬 디스패치 큐를 사용하여 작업을 수행하고 실행하고 싶습니다. 나는 멀티 코어 머신을 가지고 있으며, 만약 내가 그것을 피할 수 있다면 잠금을 원하지 않을 것이다. 직렬 디스패치 큐를 쓰고 싶지 않지만 C++ (0x?) 표준 직렬 디스패치 큐를 사용할 수 있습니까?C++에서 표준 직렬 발송 대기열을 사용 하시겠습니까?

작업을 다시 추가하거나 대기열이 각 요소 사이를 순환 할 수 있습니다. 중요하지 않습니다.

답변

2

표준 대기열을 사용하지만 잠금을 사용하지 않으려면 자물쇠가없는 대기열 구현을 찾으십시오. C++ 11에는 표준 잠금없는 대기열이 없습니다.

하나의 대기열 대신 코어/스레드마다 작업 벡터를 사용하고 이들 사이를 순환하는 것이 어떻습니까? 예를 들어, CPU와 스레드가 4 개인 경우 각각에 대해 작업 벡터를 사용하십시오. 마지막 문장에서 반복되는 주석에서 언급 한대로 작업을 동일하게 분배 한 다음 반복합니다. 그건 잠금이 없으며 여러 스레드의 대기열에있는 동일한 처리 순서 보장 (즉, 없음)을 갖습니다.

관련 문제