使用线程对矢量进行排序

tom*_*h13 4 c++ multithreading vector

C++ STL中定义的向量是重入的还是线程安全的?我可以使用两个线程并在不使用互斥锁的情况下在矢量的两半上工作(在这种情况下是排序)吗?例如:

int size = (Data_List.size())/2;

Thread A()
{

................ // Do we need to lock Data_list with a mutex
 sort(Data_List.begin(),Data_List.begin()+size,cmp);
}

Thread B()
{
....// Do we need to lock Data_list with a mutex
sort(Data_List.begin()+(size+1),Data_List.end(),cmp);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我们需要使用互斥锁来锁定Data_List的访问权限吗?

注意:cmp函数是一个常规的int比较函数.

tva*_*son 6

只要线程在不同的内存区域工作,并且比较函数只适用于那个内存和局部变量,你应该没问题.本质上,您通过划分线程之间的工作来"锁定"表的每一半,并且只让线程处理其一半的数据.