我正在尝试创建一个物理引擎(只是为了好玩),我希望它是多线程的.
我理解互斥的基础知识(只有一个线程可以修改它一次保护的资源,它们应该是类级别而不是线程级别等).我宁愿不使用原子作为成员变量(因此,如果我对它们进行复杂操作,它们将不会在执行过程中正确更改),或者只是复制变量(希望更低的内存占用) ).
遵循这个概念,(简化的)矢量类可能如下所示:
class vector
{
float x_, y_;
std::mutex guard_;
};
Run Code Online (Sandbox Code Playgroud)
如果我想使用它,它们应该如何锁定?
void foo(vector v1, vector v2)
{
std::lock_guard<std::mutex>(v1.guard_);
std::lock_guard<std::mutex>(v2.guard_);
// Do stuff with v1 and v2...
}
Run Code Online (Sandbox Code Playgroud)
像这样?这实际上会保护这两个对象吗?
TL; DR当同一个线程操作多个对象时,如何锁定互斥锁?(不使用原子或制作副本)