Mutex用于C ++中的两个线程

时间:2017-11-15 09:09:05

标签: c++ linux pthreads mutex

我创建了两个线程,它们使用通过pthread_create的最后一个参数在main中声明的变量。我希望thread2在完成一系列特定指令后使用修改该变量的值。我知道我们如何在一个线程中使用互斥,但两个或多个线程怎么样? 请参阅以下代码:

//

3 个答案:

答案 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)

您的用例需要将条件变量与互斥锁结合使用。

http://en.cppreference.com/w/cpp/thread/condition_variable