gpt4 book ai didi

c++ - 2个函数中的不同条件锁定

转载 作者:行者123 更新时间:2023-11-27 23:12:26 25 4
gpt4 key购买 nike

我在多线程环境中使用了 2 个函数。

static std::vector<MyType> shared_resource;
void funcA(){
// remove/add object to shared_resource
}

void funcB(){
// Use shared_resource (but never changes it)
}

我必须同步 2 个函数,以便当 funcA 在共享资源上运行时,funcB 等待它。一个明显的解决方案是使用临界区,但如果我使用它,对 funcB 的函数调用也会被序列化,这是我不想要的。 我的意思是我想允许多个线程同时执行 funcB 但是一旦从另一个线程调用 funcA 所有进入 funcB 的线程都被阻塞并且在所有执行 funcB 的线程退出后, funcA 处的线程被恢复并执行

不知道我的解释是否清楚,所以我写了一个例子。假设我们有线程 T1 到 T5。这是预期的行为。

  1. T1和T2同时进入funcB并执行funcB。
  2. T3 正在进入 funcA 并等待 T1 和 T2 从 funcB 退出
  3. T4 正在进入 funcB 但由于 T3 正在等待执行 funcA,T4 被阻止执行 funcB
  4. T1和T2退出后T3执行funcA
  5. T5 正在进入 funcB,但由于 funcA 仍在执行,因此被阻止
  6. T3退出funcA后,T4和T5同时执行funcB。

我应该使用什么来实现这种行为?信号?我正在 Windows/C++ 环境中实现它。

最佳答案

你应该使用所谓的读写锁,wikipedia .您可以找到一个使用 pthreads 的简单实现 here .

关于c++ - 2个函数中的不同条件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com