如何使用 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 锁的 .
我有一个关于互斥锁和 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 锁的