[過去ログ] Swift part12 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
949(1): デフォルトの名無しさん (スップ Sdbf-53Pq) [] 2021/03/07(日) 18:30:25 ID:Z1klbM1/d(1/5) AAS
プログラムビギナーの者です。
下記のプログラムを実行すると、ほぼうまく行くのですが、並列処理の時だと「func かけ算処理」のところで
10回に1回ペースで「EXC_BAD_ACCESS code=1」のエラーがでます。
どうしてエラーになるのかわからずお手上げ状態です。
どこに問題があるのかご教授お願いできないでしょうか。
ちなみに直列処理にはとりあえず、エラーはでてません。
よろしくお願いします。
環境
Macbook Air 2017 8GB
macOS Big Sur 11.2.2
Xcode 12.4
↓ソース
import Foundation
private let 最小段: Int = 1
private let 最大段: Int = 9
private var かけ算段の値: Dictionary<Int, Int> = [:]
private var かけ算値: Int!
950: デフォルトの名無しさん (スップ Sdbf-53Pq) [] 2021/03/07(日) 18:32:18 ID:Z1klbM1/d(2/5) AAS
func かけ算() {
let 開始 = Date()
let dispatch_group = DispatchGroup()
//並列処理用
let dispatch_queue = DispatchQueue(label: "かけ算", attributes: .concurrent)
//直列処理用 都度処理と同じ?
//let dispatch_queue = DispatchQueue(label: "queue")
for 段 in 最小段...最大段 {
かけ算段の値[段] = 0
dispatch_group.enter()
dispatch_queue.async(group: dispatch_group) {
かけ算スレッド(段: 段) {
(段: Int) -> Void in
print("#\(段)の段 終了 \(段) × 9 = \(かけ算段の値[段]!) です")
dispatch_group.leave()
}
}
}
951: デフォルトの名無しさん (スップ Sdbf-53Pq) [] 2021/03/07(日) 18:33:01 ID:Z1klbM1/d(3/5) AAS
dispatch_group.notify(queue: .main) {
let 終了 = Date().timeIntervalSince(開始)
print("処理時間 \(終了)秒")
}
}
//スレッド処理
private func かけ算スレッド(段: Int, かけ算スレッド終了: (_ 段: Int) -> Void) {
print("#\(段)の段 開始")
let かけ算値: Int = かけ算処理(段: 段)
かけ算段の値.updateValue(かけ算値, forKey: 段)
かけ算スレッド終了(段)
}
952: デフォルトの名無しさん (スップ Sdbf-53Pq) [] 2021/03/07(日) 18:33:29 ID:Z1klbM1/d(4/5) AAS
//かけ算実処理
@discardableResult
private func かけ算処理(段: Int) -> Int {
for 数 in 1...9 {
print(段, 数, 段 * 数, かけ算段の値[段]!)
かけ算値 = 段 * 数
//かけ算段の値.updateValue((段 * 数), forKey: 段)
}
return(かけ算値)
//return(かけ算段の値[段]!)
}
953: デフォルトの名無しさん (スップ Sdbf-53Pq) [] 2021/03/07(日) 18:33:49 ID:Z1klbM1/d(5/5) AAS
よろしくお願いします。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.029s