【发布时间】:2020-05-17 19:07:50
【问题描述】:
我正在努力解决互斥锁/锁的问题。 情况:
- 任务 A 需要相对较长的时间。它在一个线程中不规则地执行(但一次只执行一次)。
- 有一个任务 B,它很快,并且经常从另一个线程调用。
- 两个任务都在同一个内存上工作,因此不应同时执行。
- 任务 B 不等待任务 A 至关重要,因为上下文是在渲染后与 GPU 通信(纹理传输),这会导致帧延迟,因为任务 A 可能需要几个帧。
- 如果任务 A 当前正在运行,则应该跳过任务 B。
- 但决不能跳过任务 A
到目前为止我所拥有的: 任务 A 的线程(不定期调用):
{
std::unique_lock<std::mutex> mlock(the_mutex);
TaskA();
}
还有任务B(挂在渲染线程中)
{
if mutex.try_lock()
{
TaskB();
the_mutex.unlock();
}
}
The_mutex 是对象的通用 std::mutex。
这一次真的那么容易,还是我错过了什么?在过去烦人的多线程错误之后,我对这个话题变得不安全。 非常感谢。
【问题讨论】:
-
抽象不是很好吗? :)
标签: c++ multithreading mutex