Параллельный доступ к файлам в Android - PullRequest
9 голосов
/ 17 марта 2012

Я знаю, что многие ОС выполняют какую-то блокировку файловой системы, чтобы предотвратить несовместимые представления.Существуют ли какие-либо гарантии, которые Java и / или Android дают о поточной безопасности доступа к файлам?Я хотел бы узнать как можно больше об этом, прежде чем я сам начну писать код параллелизма.

Если я пропустил похожий вопрос, на который был дан ответ, не стесняйтесь закрыть эту тему.Спасибо.

Ответы [ 2 ]

10 голосов
/ 17 марта 2012

Android построен поверх Linux, поэтому наследует семантику файловой системы Linux. Если вы явно не заблокируете файл, несколько приложений и потоков могут открыть его для чтения / записи. Если вам не нужна межпроцессная синхронизация файлов, я бы предложил использовать обычные примитивы синхронизации Java для арбитража доступа к файлу.

5 голосов
/ 17 марта 2012

Нормальные функции чтения / записи (FileInputStream и т. Д.) Не обеспечивают AFAIK для обеспечения безопасности потоков. Для обеспечения безопасности потоков вам необходимо использовать FileChannel . Это будет выглядеть примерно так:

FileInputStream in = new FileInputStream("file.txt");
FileChannel channel = in.getChannel();
FileLock lock = channel.lock();
// do some reading
lock.release();

Я прочитал бы File Lock doc и позаботился бы о потоке!

...