おはようございます、ブログの3男 佐藤です。
さて、午後問3編のラストとなります。設問1,2は以前のアーカイブにございますので、それぞれご覧いただければと思います。もちろん過去問も手にとっておきましょう。
設問2で書いていたように、スレッドにより並列化されると、共有化されているデータの読み出し、書き換えはよく考えないと困ったことになります。ざっくり挙げると、他のスレッドで書き換えられるような場所を参照するのは危険ということです。
設問3では、配列bの値を配列aに入れていきます。ループの構造からすると、b[1]からb[20]までを順次代入していきます。b[]の値自体を書き換えるようなことはありません(並列化コードを見る限り、ですが)。
a[]の書き換えについては、配列ip[]にiを渡すことで得られる連続とも不連続とも言える値のセットを添え字にしています。 たとえばiが3の時、解答群イの行を見ると、ip[3]は14とわかるので、書込先として使われるのはa[14] (にb[3]が代入される) となります。
前回書いていた話でもありますし、先ほど再掲したざっくりルール、他のスレッドで書き換えられるような場所を参照するのは危険が出てくるのです。大切なことなので2度言いました。他のスレッドで書き換えられるような場所を参照するのは危険なのです、はい3度。
その上で、各行を評価していきます。
- アは論外というべきですか。a[1]への書き換えを4箇所(4スレッド)が同時に行ってしまう可能性があります(同様にa[2],a[3],a[4]も)。該当する場所をくくりましたので参考にどうぞ。
- イは…あれ?なんかいい感じ。他を見てみましょうか。
- ウは、スレッド1とスレッド2がa[8]を、スレッド1とスレッド3でa[13]を、スレッド2とスレッド4が最後にa[3]を書き換えています(一応色分け)。最後に処理を行うのがどのスレッドになったかで値が変わってしまうことになりますのでアウトです。 ※おまけあり
- エは、違うタイミングで3箇所書き換えが発生します。対応箇所はa[17],a[14],a[7]です。同じ列に存在していなくても、各スレッドの実行順序は制御できないため、スレッド1側が先か、スレッド4側が先かにより結果が変わってしまうことが考えられます。
そんなわけで、互いのスレッドで破壊しあうことがないのはイとなります、正解はイです。この設問で文中にあるように
配列ipの値によっては並列実行できない場合があるので注意が必要である。
が実際どういう意味なのかがわかっていないときちんとした理解に辿りつけないのです1。過去問で傾向をとかいう前に、基本的な意味のところだけを把握しておくことが大事ですね。だから私は授業の時などにちょこちょここう言ってます、Googleで調べてやったことの大半は覚えられない2と。
さておまけ、選択肢ウですが、同一スレッド内(たまたまですがスレッド3)で同じ場所を書き換えている箇所が2箇所あります。対象になっているのはa[15]とa[13]。この部分自体は特に実害ありません。スレッド内の処理なので、結果的に最後の処理の代入が有効です。ただしa[13]の場合はスレッド1による書き換えが発生しているのでやっぱりアウト。
そんな感じで3回に分けての午後問題問3、いかがだったでしょうか?スレッドとスレッド内のデータ共有の扱いを多少でも覚えておけば(いや、知らなくても少し考えれば)厳しい問題というものでもありません。いまどきのアーキテクチャにおいては、マルチコアによる並列実行は基本となっています。JavaがJava8で並列ストリームを加えてきたり、C#言語がasync/waitによる非同期処理を導入したり、各言語で関数プログラミング的要素が入ってきているのは、複数のコアに仕事を割り振って、効果的に仕事をできるようにしていこうという流れの一環と思われます。C/C++でも並列化支援の仕組みが入ってきたりもしてますし、ますますこの辺りが重要視されていくのでしょう。問題は人間がそれほどマルチタスクに対応できないことです。忘れそうなことは戻れるように、適宜メモでも取っていきましょうか。
それでは日曜日、ゆっくり静養でもしておきましょう。
- 出典: 独立行政法人情報処理推進機構 平成26年度春春期 基本情報技術者試験 午後問題 問3 設問3文中↩
- 賢すぎて(?)いきなり解法、やりかたにいっちゃうことが多いんですもの。理論もなしに実践しても、ね。ただし実践のフィードバックで理論をつかむのはOKでしょう。重要です。↩
2014年(平成26年度)春期の解説
- 平成26年度 春 基本情報技術者試験 【問13】(その2)
- 平成26年度 春 基本情報技術者試験 【問13】(その1)
- 平成26年度 春 基本情報技術者試験 【問12】(その2)
- 平成26年度 春 基本情報技術者試験 【問12】(その1)
- 平成26年度 春 基本情報技術者試験 【問6】
- 平成26年度 春 基本情報技術者試験 【問7】(その2)
- 平成26年度 春 基本情報技術者試験 【問7】(その1)
- 平成26年度 春 基本情報技術者試験 【問4】
- 平成26年度 春 基本情報技術者試験 【問5】
- 平成26年度 春 基本情報技術者試験 【問9】
- 平成26年度 春 基本情報技術者試験 【問8】(その2)
- 平成26年度 春 基本情報技術者試験 【問3】(その3)
- 平成26年度 春 基本情報技術者試験 【問8】(その1)
- 平成26年度 春 基本情報技術者試験 【問3】(その2)
- 平成26年度 春 基本情報技術者試験 【問3】(その1)
- 平成26年度 春 基本情報技術者試験 【問1】
- 平成26年度 春 基本情報技術者試験 【問2】
- Date:
- この記事を
友だちに教える - LINE
- - HatenaBookmark
- GooglePlus