1
Grand Central Dispatch 병렬 처리를 사용하는 C++ 11로 작성된 코드베이스가 있습니다. 특히 dispatch_apply 기본 병렬 for for some을 수행했습니다. 사소한 게임 계산. 시에라로 업그레이드 한 이후Mac OS에서 dispatch_apply가 작동하지 않는 C++ 11 응용 프로그램
,이 코드는 여전히 실행되지만 각 블록은 직렬 실행합니다 - cout을 문은 일련의 순서로 실행되고 있음을 보여 주며, CPU 사용량 그래프 작업에는 평행하게 보여줍니다.
큐는 다음과 같이 정의된다 :
workQueue = dispatch_queue_create("workQueue", DISPATCH_QUEUE_CONCURRENT);
그리고 관련 프로그램 코드는 다음과 같습니다
case Concurrency::Parallel: {
dispatch_apply(stateMap.size(), workQueue, ^(size_t stateIndex) {
string thisCode = stateCodes[stateIndex];
long thisCount = stateCounts[stateIndex];
GameResult sliceResult = playStateOfCode(thisCode, thisCount);
results[stateIndex] = sliceResult;
if ((stateIndex + 1) % updatePeriod == 0) {
cout << stateIndex << endl;
}
});
break;
}
내가 강하게 의심이 버그 중 하나,하지만이 GCD 새로운 C를 사용하라고 강요 경우 ++ 이것을위한 방법, 나는 모두 귀입니다.
이 문제가 수정 된 것 같습니다. 이제는 Swift 3의 * DispatchQueue.concurrentPerform (iterations :) * 메소드를 사용하여이 작업을 수행하는 방법을 찾아야합니다.이 메소드는 여전히 버그가있는 것으로 보입니다. 하지만 해결 방법을 고맙습니다. – Charles
Swift 3에 대해 충분히 알고 있다고 생각하지 않으므로 Swift 동시성 메서드에 대해 비슷한 해결 방법을 활용하는 방법을 제안하지 마십시오. http://stackoverflow.com/questions/39843007/swift-app-using- dispatchqueue-concurrentperformiterators-no-longer-runs-conc 시간을내어 주셔서 감사합니다. 확실히 도움을 주셔서 감사합니다! – Charles