1

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

Data bigData;

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

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

void thread4()
{
  sometimesModifyData(bigData);
}

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

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

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

4

1 回答 1

1

这称为读写锁。您可以实现所谓的互斥锁,以确保在写入进行时没有人读取,并且在读取进行时没有人写入。解决问题的一种方法是设置标志。如果作者要修改某些内容,请打开锁。在此之后,没有更多的读者可以阅读,并且在所有当前读者都读完之后,作者将开始完成其工作,然后读者再次阅读。

于 2013-01-08T02:10:02.757 回答