1

ミューテックスと pthread について質問があります。

共有フラグがある場合は、それを呼び出しましょう (F1)。そして、複数のスレッドがあります。ただし、1 つのスレッド (T1) のみがフラグを上げたり停止したりでき、他のすべてのスレッド (T2..Tn) はステータスの読み取りまたはプルのみを行います。

フラグ F1 が新しい値で設定されるときに、T1 が mutex_lock/mutex_unlock を使用すれば十分ですか? 他のすべてのスレッドも、F1 からステータスを読み取るだけであっても、mutex_lock/mutex_unlock を使用する必要がありますか?

Exemple1:

    T1()
    {
        while(Running)
        {
            pthread_mutex_lock(&lock);
            F1 = true;
            pthread_mutex_unlock(&lock);
        }
    }

    T2()
    {
        while(Running)
        {
            if(F1) {
                /* Do something */
            }
        }
    }



Exemple2:

    T1()
    {
        while(Running)
        {
            pthread_mutex_lock(&lock);
            F1 = true;
            pthread_mutex_unlock(&lock);
        }
    }

    T2()
    {
        while(Running)
        {
            pthread_mutex_lock(&lock);
            if(F1) {
                /* Do something */
            }
            pthread_mutex_unlock(&lock);
        }
    }
4

2 に答える 2

1

pthreads モデルでは、リーダー同期操作も実行する必要があります。これは、説明したようにリーダーとライターの両方でpthread_mutex_lock()/pthread_mutex_unlock()ペアにすることも、代わりに、メタルフォックスのリーダーライターロックの提案にすることもできます。

于 2016-09-20T03:48:45.290 に答える