関数とマルチスレッドについて友人と話していました。サンプルコードは次のとおりです。
void SomeClass::Foo()
{
std::lock_guard<std::mutex> lock(mMutexObj);
statement1;
statement2;
statement3;
}
そのため、コンパイラが必要な場所に関数をインライン化することがあります。そのような場合は可能ですか: コンパイラは関数をインライン化し、スコープがここで終了せず、デストラクタが呼び出されないためFoo
、3 つのステートメントはすべて実行され、機能しません:lock_guard
// Inlined operations
std::lock_guard<std::mutex> lock(mMutexObj);
statement1;
statement2;
statement3;
// Global scope, where function was inlined continues here...
global statement1;
global statement2;
...;
出来ますか?そのコンパイラがそのような関数をインライン化する割合は何パーセントですか、またはインライン化された関数の範囲を正しく理解していない可能性がありますか?