Microsoft .NET FrameworkのSystem.Threading.Monitorクラスの実装はどうなっているのでしょうか?

できるだけ具体的に知りたいです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/01/10 20:04:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

ポイント96pt

System.Threading.Monitorクラスの実装

.NET Framework のバージョンにもよりますが、以下の方法により調査可能です。

  • 1. 「.NET Reflector」(.NET 逆コンパイラー)を用いる
  • 2. 「.NET Framework のソースコード」を MS サイトよりダウンロードする
<「.NET Reflector」(.NET 逆コンパイラー)を用いて実装を確認する方法>
1. 下記サイトより「.NET Reflector」をダウンロードします。
  ■ .NET Reflector, class browser, analyzer and decompiler for .NET
  http://www.red-gate.com/products/reflector/
  → ダウンロード時に User Name / e-mail アドレスの入力を求められます。

2. 「.NET Reflector」を起動します。
  → .NET Framework のバージョンを選択します。

3. 対象のクラスを選択します。
  System.Threading.Monitor クラスは下記になります。
  → [mscorlib] - [CommonLanguageRuntimeLibrary] - [System.Threading] - [Monitor]
<「.NET Framework のソースコード」を取得する方法>
.NET Framework のソースコードはマイクロソフトのサイトにて公開されています。
下記サイトよりダウンロード可能です。

■ .NET Framework Libraries / Available Source Code Components 
http://referencesource.microsoft.com/netframework.aspx

Product Name : [.NET]
Version      : [8.0]

ソースそのものを提示するのは問題がありそうなので、
System.Threading.Monitor クラスのソースの場所のみ提示します。

<install path>\RefSrc\Source\DotNET\8.0\DEVDIV\depot\DevDiv\releases\whidbey\REDBITS\ndp\clr\src\BCL\System\Threading\Monitor.cs\1\Monitor.cs
<参考情報>
■ .NET Framework の基本クラスに対してソースレベルデバッグを行う方法 (オフライン編) - NyaRuRuの日記
http://d.hatena.ne.jp/NyaRuRu/20080930/p1
■ MS、.NETのソースコードを公開へ - @IT
http://www.atmarkit.co.jp/news/200710/05/dotnet.html
■ Visual Studio 2008で見る.NET Frameworkのソースコード - @IT
http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode...
■ InfoQ: .NET Reference Sourceの最新情報
http://www.infoq.com/jp/news/2008/12/Reference-Source
id:goblin_the_rat

回答ありがとうございます。

それで申し訳ないのですが、MonitorクラスではEnter()やExit()がextern宣言されていて、これの実装がソースツリー内では見つかりませんでした。

2009/01/10 17:16:12
  • id:cx20
    > MonitorクラスではEnter()やExit()がextern宣言されていて、
    > これの実装がソースツリー内では見つかりませんでした。

    ネイティブな呼び出しの部分は見れないようですね・・・

    まったく同じコード(実装)かは不明ですが、

    ■ Microsoft シェアード ソース CLI 実装
    http://www.microsoft.com/japan/msdn/net/sscli/mssharsourcecli.aspx

    にて提供されている
    SSCLI(Shared Source Common Language Infrastructure)に、
    ネイティブな呼び出しの部分の実装コードが含まれているようです。

    // <install dir>\sscli20\clr\src\vm\ecall.cpp
    FCFuncStart(gMonitorFuncs)
    FCFuncElement("Enter", JIT_MonEnter)
    FCFuncElement("Exit", JIT_MonExit)
    FCFuncElement("TryEnterTimeout", JIT_MonTryEnter)
    FCFuncElement("ObjWait", ObjectNative::WaitTimeout)
    FCFuncElement("ObjPulse", ObjectNative::Pulse)
    FCFuncElement("ObjPulseAll", ObjectNative::PulseAll)
    FCFuncElement("ReliableEnter", JIT_MonReliableEnter)
    FCFuncEnd()

    // <install dir>\sscli20\clr\src\vm\jithelpers.h … JIT_MonEnter の *.h
    // <install dir>\sscli20\clr\src\vm\jithelpers.cpp … JIT_MonEnter の *.cpp

    <SSCLI ダウンロード>
    ■ Download details: Shared Source Common Language Infrastructure 1.0 Release
    http://www.microsoft.com/downloads/details.aspx?FamilyId=3A1C93FA-7462-47D0-8E56-8DD34C6292F0&displaylang=en
    ■ Download details: Shared Source Common Language Infrastructure 2.0 Release
    http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&displaylang=en
  • id:goblin_the_rat
    なるほど、そっちもありましたね。
    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません