单线程在多线程环境中

时间:2016-10-08 03:48:21

标签: multithreading logging design-patterns singleton

我有一个名为FILELOGGER的Singleton类和名为number_of_lines的属性。 我将确保只有一个对象能够为FILELOGGER类创建单独的类。

在我的应用程序中,我的对象能够将其写入文件并为每次写入更新number_of_lines属性。

如果我在多线程环境中使用此设计模式,该怎么办?当其他线程尝试更新时,它应该如何锁定number_of_lines属性。而且我可能会延迟记录数据并且性能将会下降。

比如说,例如,线程T1在10:10:10时记录,T2也在相同的时间记录,并且都试图更新number_of_lines属性。

如何解决这个问题?是否有任何替代设计模式来解决这个问题。谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

您可以按照已经完成的方式同步对整个文件的访问权限,也可以使用 cons snapshotting 进行替代。

  • N 线程将文件内容写入string变量。
  • 专用线程将内存数据快照存储到磁盘并更新number_of_lines。当此专用线程需要更新时,number_of_lines将被同步。快照可能会在10秒,1分钟,1小时等时间间隔内发生......

此方法的主要问题是应用程序/系统崩溃将意味着丢失自上次快照以来未持久保存到磁盘的数据,但由于您的应用程序使用内存数据,因此应该提高整体性能。 / p>

答案 1 :(得分:0)

此外,您必须以线程安全的方式实现单例模式。我认为最好的方法是使用内部类来保证多线程应用程序中单例的目的。