小编Wim*_*erd的帖子

有人如何在一个线程中锁定多个对象?

我正在尝试创建一个物理引擎(只是为了好玩),我希望它是多线程的.
我理解互斥的基础知识(只有一个线程可以修改它一次保护的资源,它们应该是类级别而不是线程级别等).我宁愿不使用原子作为成员变量(因此,如果我对它们进行复杂操作,它们将不会在执行过程中正确更改),或者只是复制变量(希望更低的内存占用) ).

遵循这个概念,(简化的)矢量类可能如下所示:

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当同一个线程操作多个对象时,如何锁定互斥锁?(不使用原子或制作副本)

c++ multithreading

1
推荐指数
1
解决办法
403
查看次数

标签 统计

c++ ×1

multithreading ×1