タグ

ブックマーク / yupo5656.hatenadiary.org (3)

  • UNIX上でのC++ソフトウェア設計の定石 (4) - memologue

    鉄則4: スレッドの「非同期キャンセル」を行わない設計にしよう スレッドの非同期キャンセルとは: あるスレッドが別のスレッドを即座に強制終了すること 単に「設計が楽だから」「シンプルになるから」という理由でスレッドの非同期キャンセルを使うのはやめよう 一見楽そうに、シンプルそうに見えるだけ。様々な問題を引き起こす可能性が。問題の詳細を把握しないまま、スレッドの非同期キャンセルを行う設計にしないこと! pthread規格では、あるスレッドの処理を別のスレッドが強制的に中断することが許可されています。これを、スレッドのキャンセルと呼びます。 スレッドのキャンセルには次の二種類があります。 方式1: 非同期キャンセル(PTHREAD_CANCEL_ASYNCHRONOUS) キャンセルは即座に行われる 方式2: 遅延キャンセル(PTHREAD_CANCEL_DEFERRED) キャンセルは、スレ

    UNIX上でのC++ソフトウェア設計の定石 (4) - memologue
  • localtimeやstrtokは本当にスレッドセーフにできないのか (2) - memologue

    localtime関数は、返却するデータを、スレッド固有データ(Thread Specific Data, 略して TSD*1 )として確保すれば、スレッドセーフな関数として実装できると思います。 グローバル変数や、関数内で宣言されたstatic変数など、「静的な記憶期間をもつ変数」は、自動変数と異なり、普通はスレッド間で共有して使用することになります。しかし、上記のTSDを用いると、「静的な記憶期間を持ちつつスレッド毎に独立した」変数を使うことができます。以下に、JMの解説を引用しておきます。 プログラムではスレッドごとに値の異なる グローバル変数や静的変数がしばしば必要となる。 複数のスレッドは 1 つのメモリ空間を共有するため、 通常の変数ではこれを実現することができない。 スレッド固有データは、 この必要性への POSIX スレッドの答えである。 それぞれのスレッドはスレッド固有デ

    localtimeやstrtokは本当にスレッドセーフにできないのか (2) - memologue
  • memologue

    google-perftoolsというx86,x86_64,ppcなUNIX向けのプロファイラの(cpu-profiler部分)を、armなLinuxに対応させてみました。何かの役に立つかもしれないので、patchおよびpatch作成作業のメモを載せます。arm-v5tアーキテクチャ(ARM9系)向けの移植です。 Linux/ARM向けのソフトウェアのパフォーマンスを解析したいなぁと思うことがあったのですが、OProfileはカーネル入れ替えがめんどくさい、gprofはプロファイル専用のバイナリを作成するのがめんどくさい、プロプラな奴は興味ないということで移植しました。移植の方がめんどくさいだろという話もありますが。perftools自体の説明はこちらが便利です。あーそういえばAndroidもARMでしたっけ? パッチ http://binary.nahi.to/google-perfto

    memologue
    unineko
    unineko 2006/07/26
  • 1