none
ManagedThreadIdのスレッドIDについて RRS feed

  • 質問

  • いつもお世話になっております。

    ManagedThreadIdのスレッドIDは実行スレッドでは当然ユニークと

    思いますが、再利用等で過去の実行スレッドIDと重複(ID再利用)する

    事はあるのでしょうか?  (プロセス終了等を除いて)

    よろしくお願いします。

    2013年7月16日 1:38

回答

  • もちろん、再利用されます。
    • 編集済み Hongliang 2013年7月16日 1:52 短すぎた
    • 回答としてマーク indigo-x2 2013年7月16日 5:53
    2013年7月16日 1:51
  • Hongliangさんが既に答えられていますが補足で。

    ThreadPoolクラス及び(ThreadPoolを使用する)Taskクラスの場合、そもそも1つのスレッドを使い回すことが前提ですので、同じManagedThreadIdを頻繁に割り当てられます。

    Threadクラスの場合、インスタンス毎にOSスレッドも作成され、ManagedThreadIdも新たに割り当てられます。しかしint型ですからいずれは再利用されます。ですので、再利用されないという過程をしてはいけません。

    別の方法として、ManagedThreadIdを使用せずThread.Nameプロパティに独自にユニークな値を割り当てることができます。

    2013年7月16日 2:46

すべての返信

  • もちろん、再利用されます。
    • 編集済み Hongliang 2013年7月16日 1:52 短すぎた
    • 回答としてマーク indigo-x2 2013年7月16日 5:53
    2013年7月16日 1:51
  • Hongliangさんが既に答えられていますが補足で。

    ThreadPoolクラス及び(ThreadPoolを使用する)Taskクラスの場合、そもそも1つのスレッドを使い回すことが前提ですので、同じManagedThreadIdを頻繁に割り当てられます。

    Threadクラスの場合、インスタンス毎にOSスレッドも作成され、ManagedThreadIdも新たに割り当てられます。しかしint型ですからいずれは再利用されます。ですので、再利用されないという過程をしてはいけません。

    別の方法として、ManagedThreadIdを使用せずThread.Nameプロパティに独自にユニークな値を割り当てることができます。

    2013年7月16日 2:46
  • ありがとうございます。

    やはりそうですかそんな動作しているなあと^^

    • 編集済み indigo-x2 2013年7月16日 5:53 追記しました
    2013年7月16日 5:52
  • ありがとうございます。了解しました。

    非同期デりゲートとか問題になりそうなので対応を考えます。

    2013年7月16日 5:55
  • 非同期デリゲートもThreadPoolを使うのでダメですね。
    2013年7月16日 13:34