我有一个关于互斥锁和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建议的读写器锁。