私はいくつかのスレッドが同時に呼び出すことができる関数を持っています。この関数には入力引数があります。たとえば、次の関数を考慮してください。マルチスレッドで入力引数を持つ関数を呼び出す
bool MyClass::run(QString moduleName)
{
qDebug() << QThread::currentThreadId();
...
}
この関数を使用するには2つのオプションがあります。まず、私は以下のようにrun関数の内部でミューテックスを使用することができます。以下のようにこの関数を呼び出すときに
...
run("Reza"); // can be different for different threads
...
bool MyClass::run(QString moduleName)
{
qDebug() << QThread::currentThreadId();
QMutexLocker locker(&runMutex);
...
}
第二は、ミューテックスを使用している:
...
runMutex.lock();
run("Reza"); // can be different for different threads
runMutex.unlock();
...
bool MyClass::run(QString moduleName)
{
qDebug() << QThread::currentThreadId();
...
}
正しいと優れている1?入力引数(moduleName)は最初のオプションで変更されますか? (私はこの関数に別の引数を渡すスレッドを呼び出すとき)を意味する
おかげさまであなたの助けをありがとう。 Reza
どのリソースをミューテックスで保護しますか? (そして 'qDebug()'はあなたの最初のスニペットでは保護されていません)。 – Jarod42
"better"を定義する... –
@ Jarod42私はmutexで保護したい私の "run"関数にいくつかの共通リソースを持っています。私はqDebug()が保護されていないことを知っています。 – Reza