atomicAdd
悩んだこと
今日少し詰まったことがあった。それは次のようなもの。
訪れたことがない顧客を候補としてcandidates配列に格納し、candidatesのサイズを増やすというもの。候補者を探すのをスレッドで並列に行う。
しかし、こうすると上手くいかない。
本当はあるスレッドがcandidates配列にcustomerを代入したら直後にcandidateSizeを増やしたかったのだが、これだとそうはいかない。あるスレッドがcandidates配列にcustomerを代入した直後に他のスレッドがcandidates配列の同じ場所にcustomerを格納する可能性がある。
どうしたか
自分がやりたいことをどう表現するか1時間ほど悩んだ後で先生にやり方を聞いてみた。それは次のようなもの。
なるほどなぁ。確実に自分には思いつかなかった。悩んでた時はatomicAddの返り値を知らなかったのだが知ってたとしても思いつかなかったと思う。
このコードのパターンはよくあるのかもしれない。覚えておこう。
やはり聞ける人がいるというのは大きいなと感じた。