如何使用 pthread mutex 处理共享资源

How to handle shared resources with pthread mutex

我有一个关于互斥锁和 pthreads 的问题。

如果有共享标志,就调用它(F1)。并且有多个线程。 但是只有一个线程 (T1) 可以 raise/cease 标志,所有其他线程 (T2..Tn) 只能读取或拉取状态。

当标志 F1 被设置为新值时,如果 T1 使用 mutex_lock/mutex_unlock 就足够了吗? 所有其他线程是否也应该使用 mutex_lock/mutex_unlock 即使它们只打算从 F1 读取状态?

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);
        }
    }

你可以使用单作者多读者的习惯用法。

阅读中:

pthread_rwlock_rdlock(&rwlock);

写作:

pthread_rwlock_wdlock(&rwlock);

如果您的用例像您发布的示例一样简单,您可能会考虑涉及原子标志的无锁版本。

在pthreads模型下,readers do也需要进行同步操作。正如您所描述的,这可以是 reader 和 writer 中的 pthread_mutex_lock() / pthread_mutex_unlock() 对,或者 reader-writer 锁的 .