多线程应用程序,具有写入可能性的并行读取

时间:2013-01-08 01:57:25

标签: multithreading

例如,我有多线程应用程序,可以表示为:

Data bigData;

void thread1()
{
  workOn(bigData);
}
void thread2()
{
  workOn(bigData);
}
void thread3()
{
  workOn(bigData);
}

有很少的线程正在处理数据。我可以保持原样,但问题是有时(非常很少)数据被thread4修改。

void thread4()
{
  sometimesModifyData(bigData);
}

可以在那里添加关键部分,但多线程没有任何意义,因为只有一个线程可以同时处理数据。

在使线程安全的同时让它感知多线程的最佳方法是什么?

我正在考虑一种状态(sempahore?),这会阻止同时读写,但会允许并行阅读。

1 个答案:

答案 0 :(得分:1)

这称为a readers–writer lock。您可以实现所谓的互斥锁,以确保在执行写操作时没有人读取,并且在读取操作时没有人写入。解决问题的一种方法是拥有标志。如果编写器需要修改,则打开锁。没有更多读者可以阅读,在所有当前读者完成之后,作者将完成其工作,然后读者再次阅读。