質問があります。
他人の作成したプログラムを調査していて、
その中で、_mlock(),_munlock()という関数が
使用されています。
MSDNで検索したり、インターネットや当HPで
検索しても情報がみつかりません。
ちなみに、VCのデバッグモードで当関数に
ステップインしてみたのですが、
EnterCriticalSection(),LeaveCriticalSection()
をコールして排他制御をしているみたいです。
この関数の意味を教えて頂きたいのですが。
使用環境は、WinXP、VC6.0です。
回答ありがとうございます。
せっかく教えていただいたのに恐縮なのですが、
このHPは自分も検索にヒットしたため
みてみたのですが、これは「HP-UX」つまりUNIXの
関数に関しての説明なのでは?
自分が知りたかったのは、Windowsに関してです。
引数も自分が調査している方は、int型が
1つのみです。
排他処理を行ってるだけだと思いますが。
排他処理って解ってますよね。
でもそれなら「ひみか」さんが教えてくれたHPで理解できるはずだし・・・
ヘルプに載ってないということは、
ライブラリが内部で使っている未公開関数でしょうから、
UNIXの同じ関数から類推するか、
ソースのコメントを見て判断するか、
ソースの内容から想像するしかないでしょう。
話を聞いていると_mlock(),_munlock()という関数自体がその他人による実装なのでは?
それなら、ここで聞いても全く無意味と言うものです。
なぜなら、その作成者しか知りようがないから。
(ドキュメントに書かれていないのであれば)
debugで追えると言う事はそういうことなんではと思ったのですが、
外していたらごめんなさい。
(ちなみにインストール時にソースをインストールしていれば、
MFC等の内部まで追えると言うのは知っていますので悪しからず)
ランタイムソースに
>mlock.c - Multi-thread locking routines
と言うのがありますね
ご自身で解析してみれ
みなさん回答ありがとうございます。
意味を理解することができました。
ステップインしてソースコード(ランタイムソース)を解析してみたのですが、
どうやら、ランタイム関数内部でのみ使用する目的の
排他制御用関数みたいです。(アプリ側からコールもできる)
fprintf()とかするときに、関数内部でもっているバッファ等を
複数スレッドが同時アクセスしないように排他制御してるみたいです。
自分が解析していたプログラムがしたいことは、
どうやら、キー入力処理が終了するまでの間に、
他スレッドが行っている標準出力をさせないことのようです。
(同時に処理させない)