0

質問の動機

一連のスレッドのエントリ ポイントである関数内のいくつかの変数を保護するためにミューテックスを使用しています。ミューテックスは同じスコープにある変数を保護すると思いますが、関数の引数を保護しますか? 特に引数がポインタの場合。

サンプルコード

編集: Mutex は main で宣言されています。

私はこのような機能を持っています:

void threadfunction(int index, char* const flag)
{
    //std::mutex m;
    std::lock_guard<std::mutex> lock(m);

    // Is this thread safe?
    if(*flag) { *flag = 0; index ++; }
}

int main()
{
    std::mutex m;
    std::vector<std::thread> threadvec;
    threadvec.push_back(std::thread(threadfunction)); // Or whatever it is
    ... join ...
}

私はあなたが問題を見ることができると思います.引数はミューテックスの同じスコープにあるので、インデックスが保護されていると思います. ただし、「char* const flag」に格納されているアドレスはスレッドセーフであると想定していますが、「*flag」はそうではないと推測しています。これは正しいですか、解決策はありますか?

ありがとう

PS: 質問を編集し、HTML での私の恐ろしい試みに対処しなければならない人には申し訳ありません。

4

3 に答える 3