我是否需要互斥锁来对共享对象的不同部分进行独立操作?
Do I need mutex for independant operations on seperate parts of a shared object?
假设我们有一个 100x100 的矩阵。
我们有两个线程都通过引用访问这个矩阵(C++ 中的 std::ref())。
第一个线程分配到 1-50 行,第二个线程分配到 51-100 行。他们都开始在他们的街区工作并写信给他们。
两个线程之间没有通信,并且一个线程不可能 read/write 分配给另一个线程的块中的某些东西。
在这种特殊情况下,似乎使用互斥体是多余的,我说得对吗?
正确。如果您不共享任何数据,则无需锁定。
但是你有这个矩阵是有原因的,你可能想稍后分享它。为此,您需要在线程之间建立一些通信,可能使用互斥锁和条件变量。
在数学中,大多数时候线程用于将一些计算卸载到其他 CPU,以便稍后可以合并它们的结果。合并是需要同步的部分。
假设我们有一个 100x100 的矩阵。
我们有两个线程都通过引用访问这个矩阵(C++ 中的 std::ref())。
第一个线程分配到 1-50 行,第二个线程分配到 51-100 行。他们都开始在他们的街区工作并写信给他们。
两个线程之间没有通信,并且一个线程不可能 read/write 分配给另一个线程的块中的某些东西。
在这种特殊情况下,似乎使用互斥体是多余的,我说得对吗?
正确。如果您不共享任何数据,则无需锁定。
但是你有这个矩阵是有原因的,你可能想稍后分享它。为此,您需要在线程之间建立一些通信,可能使用互斥锁和条件变量。
在数学中,大多数时候线程用于将一些计算卸载到其他 CPU,以便稍后可以合并它们的结果。合并是需要同步的部分。