关于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::vector
,thread
表示std::thread
。如果我假设错误,请纠正我。
首先是一个包含thread
对象的向量。另一个是包含作为指向CCD_ 13的指针的CCD_。
使用其中一种或另一种的优点和缺点是什么?
vector<thread>
的优点是可以获得thread
对象。vector<thread>
的缺点是无法获得thread*
对象。
vector<thread *>
的优点是可以获得thread*
对象。vector<thread *>
的缺点是没有得到thread
对象。
vector<thread>
在您想要启动多个线程进行某些并行编程时非常有用。
我还没有遇到vector<thread *>
有用的用例。
让我们称它们为值和指针版本:
-
值版本将具有更好的缓存位置,用于顺序访问。如果线程是std::thread,它将是可移动的,否则复制构造将更加昂贵。
-
指针版本意味着你总是追逐一个指针来访问它。页面错误代价高昂。如果元素是可选的/缺失的,则可以将条目设置为nullptr。如果您使用这样的直指针,您可能需要手动管理资源。这是错误修剪,会导致资源泄漏(在本例中是线程和内存(。