从不同的线程同步访问和删除列表中的项

Synchronize access and delete item in a list from different threads.

本文关键字:删除列 删除 列表 访问 线程 同步      更新时间:2023-10-16

我有一个对象列表。而一个线程将根据某些条件添加或删除此列表中的对象。而其他线程将访问此列表中的对象。例:

List<node*> list

Thread1:
 {
   list.append(node);
   list.removeOne(index);
   ............
 }
Thread2
{
   Node* node = list.at(index);
   if(node)
     doSomething(node);
}

如何避免访问空指针时,执行doSomething(节点),但节点从thread1删除;

虽然可以使用标准锁机制(参见互斥锁)来解决这个问题,但您可能需要研究特定于读写器的同步原语。它将允许有多个读取器,但一次只能有一个写入器处理列表。