例如,我有多线程应用程序,可以表示为:
Data bigData;
void thread1()
{
workOn(bigData);
}
void thread2()
{
workOn(bigData);
}
void thread3()
{
workOn(bigData);
}
有很少的线程正在处理数据。我可以保持原样,但问题是有时(非常很少)数据被thread4修改。
void thread4()
{
sometimesModifyData(bigData);
}
可以在那里添加关键部分,但多线程没有任何意义,因为只有一个线程可以同时处理数据。
在使线程安全的同时让它感知多线程的最佳方法是什么?
我正在考虑一种状态(sempahore?),这会阻止同时读写,但会允许并行阅读。
答案 0 :(得分:1)
这称为a readers–writer lock。您可以实现所谓的互斥锁,以确保在执行写操作时没有人读取,并且在读取操作时没有人写入。解决问题的一种方法是拥有标志。如果编写器需要修改,则打开锁。没有更多读者可以阅读,在所有当前读者完成之后,作者将完成其工作,然后读者再次阅读。