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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.