【问题标题】:Calling common function from different threads synchronously从不同线程同步调用公共函数
【发布时间】:2021-06-30 12:43:20
【问题描述】:

我有一个要求,我需要根据动态激活的触发器发送一封电子邮件。我在下图中简要介绍了我当前的代码架构。

在下图中,我有一个类 Sample.cpp,它具有发送电子邮件的 Common 功能。此Common 函数在EmailClass 中的triggerFun 函数的单个线程中调用。 EmailClass 被多个类动态调用,如下图所示。

我的要求是我想跨多个线程同步 common 函数的使用。意味着我只想让一个线程一次调用 common 函数。在第一个线程中使用 common 函数竞争后,然后想让第二个线程允许执行 common 函数等......

能否请您告诉我是否有任何方法可以在函数 common 的使用中同步线程。

EmailImage

【问题讨论】:

  • 您在寻找std::mutex 吗?
  • @largest_prime_is_463035818,在我的情况下,超过 10 个线程尝试访问“公共”功能。那么当我使用互斥锁时,是否所有剩余的线程都等待公共函数从之前的线程函数中解锁,然后剩余的线程被执行?

标签: c++ multithreading thread-safety mutex


【解决方案1】:

您可以使用std::mutex

void common() {
  static std::mutex m;
  std::lock_guard lck(m);
  
  // do something

}

【讨论】:

  • 在我的例子中,超过 10 个线程尝试访问“公共”功能。那么当我使用互斥锁时,是否所有剩余的线程都等待公共函数从之前的线程函数中解锁,然后剩余的线程被执行?
  • @masthan 是的,这就是互斥锁的用途。请参阅here 了解更多信息。
猜你喜欢
  • 2022-10-14
  • 1970-01-01
  • 2018-06-14
  • 2021-11-07
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2022-10-24
相关资源
最近更新 更多