MSDN ページから:
「GlobalMemoryStatusEx 関数によって返される情報は揮発性です。この関数を 2 回連続して呼び出すと、同じ情報が返されるという保証はありません。」
これは理にかなっていますが、これがスレッドセーフかどうかは判断できません。誰かが確かに何らかの方法を知っていますか? これをグーグルで検索してみましたが、この情報が見つかりません。
MSDN ページから:
「GlobalMemoryStatusEx 関数によって返される情報は揮発性です。この関数を 2 回連続して呼び出すと、同じ情報が返されるという保証はありません。」
これは理にかなっていますが、これがスレッドセーフかどうかは判断できません。誰かが確かに何らかの方法を知っていますか? これをグーグルで検索してみましたが、この情報が見つかりません。
MSDN ページに記載されているのは、関数によって返される情報が時間とともに変化するということです。これが「揮発性」の意味です。たとえば、 によって返される情報GetSystemTime
も「揮発性」です。
手続きに関するその他の異なる概念は、「再入可能であること」と「スレッドセーフであること」です。再入可能であることは、プロシージャによって使用される情報がグローバル変数ではなくローカル変数に依存することを意味し、スレッドセーフ プロシージャの形式として解釈される可能性があります。ただし、「スレッドセーフ」とは、プロシージャが必要とするリソースにアクセスするときに、プロシージャがスレッド相互排除のメカニズムを実装することを意味します。
さて、MSDN は関数がスレッドセーフであることについて何も述べていませんが、関数がシステム リソースにアクセスする場合、関数は実際にスレッドセーフであると想定できます。さらに、関数はローカル構造体 (関数が情報を書き込む場所) へのポインターを取得するため、再入可能です。グローバル構造体へのポインターが返された場合GlobalMemoryStatusEx
、関数がスレッドセーフではない可能性があります。そのような場合、MS の人はおそらくこれに気付くでしょう。たとえば、次のリンクの備考セクションの最後のメモを参照してください: http://msdn.microsoft.com/en-us/library/2c8d19sb(v=vs.90).aspx