我创建了两个线程,它们使用通过pthread_create的最后一个参数在main中声明的变量。我希望thread2在完成一系列特定指令后使用修改该变量的值。我知道我们如何在一个线程中使用互斥,但两个或多个线程怎么样? 请参阅以下代码:
//
答案 0 :(得分:0)
您应该在共享变量的同一位置创建互斥锁。在你的情况下,它是主要功能。 然后,您需要在访问共享变量的所有线程中共享此互斥锁。
您可以在全局变量上共享此互斥锁,或者在与共享变量相同的属性中更好地共享此互斥锁。但是你必须定义将变量和互斥体放在一起的结构。
<强>更新强>
您应该在pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
如果cond上当前没有线程被阻止,则pthread_cond_signal()和pthread_cond_broadcast()函数无效。
答案 1 :(得分:0)
您应该在访问变量之前锁定互斥锁,并在完成变量工作后解锁。使用lock_guard保持互斥锁定,并使用括号执行lock_guard生存期。 http://www.cplusplus.com/reference/mutex/lock_guard/
std :: mutex mtx; //全局互斥 int v; //全局变量;
int k;
...
//repeat this code in each thread to access the variable
{
std::lock_guard<std::mutex> lck (mtx);
//access the variable;
k = v; //read global variable or
v = k; //write
}
答案 2 :(得分:0)
您的用例需要将条件变量与互斥锁结合使用。