タグ

2010年5月28日のブックマーク (4件)

  • [実装編]スレッドセーフにすることを忘れてはいけない

    スレッドセーフとは,アプリケーションをマルチスレッドで動作させても問題がないことを指す。サーバー向けアプリケーションは,マルチスレッドで動作するように設計・実装することが望ましい。そのほうが通常はパフォーマンスが向上するからだ。 だが,マルチスレッドのアプリケーションは,注意深く設計・実装しないとトラブルが生じる。例えば,あるスレッドで保持していた変数の値がほかのスレッドからアクセスされ,処理結果が上書きされたり,ほかの利用者の情報が見えてしまったりする。 こうしたトラブルは,開発者が1人で単体テストしているときには見つけられず,多数の利用者で限界時の挙動テストをしたときや,番移行した後で,たまたま見つかることが多い。トラブルが発生するタイミングを再現することが難しいので,デバッグは困難になりがちだ。 マルチスレッドでのトラブルを防ぐため,開発者は,スレッドセーフな設計と実装を心がける必

    [実装編]スレッドセーフにすることを忘れてはいけない
  • スレッドセーフ - Wikipedia

    スレッドセーフ(英: thread-safe)は、マルチスレッドプログラミングにおける概念である。あるプログラムコードがスレッドセーフであるという場合、そのコードを複数のスレッドが同時並行的に実行しても問題が発生しないことを意味する[1]。特に、ある共有データへの複数のスレッドによる読み書きアクセスがあるとき、一度に1つのスレッドのみがその共有データにアクセスするようにして安全性を確保しなければならない。スレッドセーフでないコードを同時並行的に実行すると、データ競合による未定義動作を引き起こしたり、競合状態(レースコンディション)による意図しない動作を引き起こしたりする。場合によっては深刻なセキュリティホール(脆弱性)が引き起こされることもある[2]。 スレッドセーフはマルチスレッドプログラミングにおける重要な要素である。それは従来、オペレーティングシステムの開発者だけが考慮しなければなら

  • 連載:C#入門 第3回 クラスとオブジェクト(3/3) - @IT

    staticの効力 前回は、おまじないとして必ずstaticを付けると説明したが、今回は一部の例外を除き、ずっとstaticなしでやってきた。そもそも、staticとは何だろうか? staticの機能は、クラス自身が変数やメソッドを持てるようにすることである。通常、クラスは設計図であり、インスタンスを作った時点で、変数が生まれる。ところが、staticを付けて変数を宣言すると、その変数はインスタンスを作らなくても最初から存在することになるのである。メソッドの場合は、インスタンスを作らなくても呼び出せることになる。 ならば全部staticを付けてしまえば、いちいちインスタンスなど作らなくても済むので楽ではないかと思う人がいるかもしれない。だが、そうは問屋がおろさない。staticを付けた変数は、プログラムのなかに実体が1個しか作られないのである。そのため、Personクラスを使ってtaroと

    WhatAmILookingFor
    WhatAmILookingFor 2010/05/28
    オブジェクト指向にアクセス修飾子がある理由
  • @IT:事例に学ぶWebシステム開発のワンポイント(4)マルチスレッドのいたずらに注意

    今回のワンポイント コードのロジックに誤りを見つけられないのに、どうも正しく動作してくれない。このようなケースでは、マルチスレッドの影響を疑うべきだ。ServletやJSPはマルチスレッドで動作している(明示的にシングルスレッドで動作させることも可能だが)。そのため、変数の扱いに注意しないと、スレッドごとに値が書き換えられ、プログラムが正しく動作しない要因となる。 マルチスレッドのいたずら 機能確認の試験中は問題なかったのに、複数の端末から負荷をかけてみたらどうしたことか期待どおりに動作しない。プログラムを調査してみても原因が分からなくて途方に暮れる。こんな状況をさまざまなプロジェクトで何度も見掛けてきた。こういう状況になったら、プログラムがスレッドセーフ(複数のスレッドから同時にアクセスされても動作を保証された状態)かどうかを疑ってみることをお勧めする。 マルチスレッドに関する問題は、さ

    @IT:事例に学ぶWebシステム開発のワンポイント(4)マルチスレッドのいたずらに注意