矢量<thread>和矢量<线程之间的区别 *>



关于C++中线程的问题

使用其中一种或另一种的优点和缺点是什么?

vector<thread> tvec;
...

vector<thread*> tvec; // or vector<shared_ptr<thread>> tvec;
...

std::thread是一个小类,主要只包含线程ID或句柄。它也是可移动的,因此是按值存储在vector中的良好候选者。

因此,按值存储它们是最简单和可读的,因为它是vector<thread> tvec;

此外,形式vector<T*>具有非拥有语义,因此可能与您想要的有所不同。

vector<thread>vector<thread *>之间的差异

我假设vector表示std::vectorthread表示std::thread。如果我假设错误,请纠正我。

首先是一个包含thread对象的向量。另一个是包含作为指向CCD_ 13的指针的CCD_。

使用其中一种或另一种的优点和缺点是什么?

vector<thread>的优点是可以获得thread对象。vector<thread>的缺点是无法获得thread*对象。

vector<thread *>的优点是可以获得thread*对象。vector<thread *>的缺点是没有得到thread对象。


vector<thread>在您想要启动多个线程进行某些并行编程时非常有用。

我还没有遇到vector<thread *>有用的用例。

让我们称它们为值和指针版本:

  1. 值版本将具有更好的缓存位置,用于顺序访问。如果线程是std::thread,它将是可移动的,否则复制构造将更加昂贵。

  2. 指针版本意味着你总是追逐一个指针来访问它。页面错误代价高昂。如果元素是可选的/缺失的,则可以将条目设置为nullptr。如果您使用这样的直指针,您可能需要手动管理资源。这是错误修剪,会导致资源泄漏(在本例中是线程和内存(。

最新更新