LINUX.ORG.RU

потоки и доступ к файлам


0

0

Всем здравствуйте. Как реализовать доступ к одному файлу из нескольих потоков ? Достаточно ли будет просто мутексов или надо еще ставить блокировку на сам файл? Файл нужен только для чтения

anonymous

open, read. А что ещё нужно?

fk0
()

>Достаточно ли будет просто мутексов или надо еще ставить блокировку на сам файл?

мутексов будет достаточно

cvv ★★★★★
()

Файл будет читаться через один дескриптор или через разные? IMHO второй вариант более предпочтителен и никакой синхронизации при его использовании вообше не нужно.

anonymous
()
Ответ на: комментарий от anonymous

cvv thnx Через один. Смысл в том, что потоки разбирают и обрабатывают один файл.

anonymous
()
Ответ на: комментарий от anonymous

в контексте конкретной задачи он может быть совершенно неюзабельным

cvv ★★★★★
()

1. блокировки бесполезны ибо работают на уровне процесса. потокам будет пофиг на эти блокировки.
2. по идее мьютексов достаточно (на SMP можно использовать spin locks),
хотя если тока читать, может быть и синхронизация не потребуется... потестируйте :)

anonymous
()
Ответ на: комментарий от anonymous

>блокировки бесполезны ибо работают на уровне процесса. потокам будет пофиг на эти блокировки.

не совсем так. если ты имееш один файловый дескриптор расшаренный на несколько потоков то ты прав а если для одного и тогоже файла каждый поток создаст собственный файловый дескриптор то блокировки должны работать. но мьютексы в любом случае лучше.

cvv ★★★★★
()
Ответ на: комментарий от cvv

"... то блокировки должны работать..."
но, к сожалению, не работают... при попытке одновременной записи в файл из 2 нитей, файл портится. спасают тока мьютексы.

anonymous
()
Ответ на: комментарий от anonymous

>блокировки должны работать

О каких блокировках идет речь и как они применяются? Нет ли иллюзий относительно того, что блокировки mandatory?

anonymous
()
Ответ на: комментарий от anonymous

>О каких блокировках идет речь

fcntl, lockf, flock

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.