如何避免文件操作中的并发操作(保存/删除)

问题描述 投票:0回答:1

我遇到了一个问题,需要帮助。

我正在设计一个简单的文件服务(Http),用户可以使用该服务上传/下载文件,以及删除文件服务器中的文件。

文件服务将文件存储在父文件夹(例如/data/fileserver/)下的单个Linux计算机中。上传的文件(例如xxx.mp4)可以与计算机中的路径一起保存,如/data/fileserver/demo/1/xxx.mp4

问题是:如何避免此文件服务中的并发操作(保存/删除)?

EG

用户A正在上传文件xxx.mp4,文件服务正在使用路径/data/fileserver/demo/1/xxx.mp4保存(尚未完成)。

同时,用户B调用此文件服务的delete api删除文件夹/data/fileserver/demo。此删除操作将影响用户A的保存操作。

我希望在这种情况下用户B的删除操作将失败。

该模型似乎锁定了树的分支,但我不知道如何处理。

文件服务器基于java语言。

谢谢。

java concurrency locking
1个回答
0
投票

由于HTTP可能是异步的,我会使用设计模式方法。

例如,您可以实现一个处理确定路径上的操作的单例。

假设您不希望'fileserver'文件夹在完成任何类型的操作之前进行任何更改。

使用键作为foldername实现映射,将值实现为true或false(意味着操作与否)

似乎是一个简单的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.