二つのスレッドで同一のA関数を呼び出した場合の話なんですが
関数内部でSleep命令やループなどでA関数の処理を行っている最中に
他のスレッドがA関数を呼び出した場合、問題なく実行はできるのでしょうか?
>二つのスレッドで同一のA関数を呼び出した場合の話なんですが
>関数内部でSleep命令やループなどでA関数の処理を行っている最中に
>他のスレッドがA関数を呼び出した場合、問題なく実行はできるのでしょうか?
この情報だけだと問題ある場合もあれば、無い場合もありますとしか・・
関数Aがスレッドセーフならば問題なしです・・
情報不足ですみません、スレッドセーフかどうかはヘルプを
参照してみましたが不明でした。
変わりにその関数の作成方法を書きます。
ダイアログベースで作成する。
作成したダイアログのメンバー関数を一つ作る。
ダイアログにボタンを作成し、スレッドを二つ並列に立ち上げる。
スレッド内部ではダイアログのメンバー関数を参照している。
これはスレッドセーフな関数なのでしょうか?
これだけでは解りません。
グローバル変数を使用しないとかの情報が必要かと・・・
スレッドで共有する関数Aの中でどんな処理をしているかによります。
スレッドセーフの条件としてはこんなものでしょうか。
・Aの中で確保されたintとかcharなどの単純データ型へのアクセスはスレッド
ごとに変数領域が確保されているため問題ありません。
・上記変数がクラスのインスタンスなら、そのクラスのうちAでアクセスする部
分がグローバル変数等を使用していないか、使用しているならその値が突然
変化しても動作に問題ないか。または変化しないことが確認できるか。
・Aでアクセスするのがメンバ変数やグローバル変数ならば、その値が突然変化
しても動作に問題ないか。または変化しないことが確認できるか。
・関数の呼び出しなら、その呼んだ関数の中で使用している変数が上記の条件を
満たすか。
・WindowsAPIの呼び出しは概ね大丈夫。(なんじゃないでしょうか)
思いつきで書いていますので、あくまで参考程度ということで。
Aの中でstatic変数を使っているとヤバいかも。
メモリだろがファイルだろがなんだろが、
複数のスレッドが資源を共有してたらヤバいかも。つか、ヤバい。