我有一个在OpenMP的2个线程之间共享的列表。该列表作为对每个线程调用的外部函数的引用传递。在该函数中,每个线程将生成一个私有列表,锁定共享列表,并通过splice()将私有列表与共享列表连接在一起。当在每个线程中发生splice()时,我使用了omp_lock_t,但是在2个线程结束后生成的共享列表不正确,就好像另一个线程看不到当前线程对共享列表所做的更改一样。我该怎么办?
int main(int argc, char** argv)
{
list<string> shared_list;
omp_lock_t l0;
omp_init_lock(&l0);
#pragma omp parallel num_threads(2)
{
external_function(shared_list, &l0);
}
}
external function(list<string>& shared_list, omp_lock_t* l0)
{
list<string> local_list;
for (int i = 0; i < 10; i++)
{
local_list.push_back("Aloha");
}
omp_set_lock(l0);
shared_list.splice(shared_list.end(), local_list);
omp_unset_lock(l0);
}