如何使用pthread互斥锁处理共享资源



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

如果有一个共享标志,我们称它为(F1)。这里有多个线程。但是只有一个线程(T1)可以升起/停止标志,所有其他线程(T2..Tn)只能读取或提取状态。

是足够的,如果T1使用mutex_lock/mutex_unlock时,标志F1将设置一个新的值?是否所有其他线程也应该使用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模型下,读取器也需要执行同步操作。这可以是您所描述的读取器和写入器中的pthread_mutex_lock()/pthread_mutex_unlock()对,也可以是metalfox建议的读写器锁。

相关内容

  • 没有找到相关文章

最新更新