1
Grand Central Dispatchの並列処理を使用したC++ 11で書かれた完全に機能するコードベースがありました。具体的にはdispatch_apply些細なゲームの計算。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
スウィフト3について十分に知っているとは思わないが、スウィフト並行性の方法で同様の回避策を活用する方法を提案するには http://stackoverflow.com/questions/39843007/swift-app-using- dispatchqueue-concurrentperformiterations-no-longer-runs-conc あなたの時間のおかげでいずれにせよ、間違いなく助けに感謝! – Charles