![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Совместный доступ к файлу. [D6, Win2k]
Brand © (2002-09-05 23:02:00)У кого есть какие предложения по наиболее лучшему способу организации совместного доступа к файлу? К примеру у меня 1000 (а может и больше) процессов, которые одновременно хотят что-нибудь записать в файл. Есть две мысли:
1. В каждом процессе организовать цикл из 10 повторений попыток открытия на запись. Но этого может и не хватить.
2. Организовать бесконечный цикл, пока не откроется файл для записи. Но неизвестно, как в этом случае поведет себя операционка.
Ваши предложения.
[NIKEL] (2002-09-07 23:09:00) [1]хех, с этого и надо было начинать, хотя странно что в вопрос ты поместил D6 и Win2k ;)
Brand (2002-09-07 23:01:00) [2]Да, CreateFileMapping было-бы, наверное неплохо, но все дело в том, что програмлю я в данном случае под FreeBSD, потому и вопрос звучал в общем"Как........".
[NIKEL] (2002-09-07 22:05:00) [3]а зачем сразу разные программы? советую понаблюдать как работает Explorer, открываешь папку, хопа, и у тебя новое окно - но это не новая копия експлорера, это новый поток, т.е. он ловит это дело и добовляет новый процесс к Основному, и все... еще раз подумайте над структурой программы
MBo (2002-09-07 06:44:00) [4]CreateFileMapping и далее по хелпу WinSDK
Brand (2002-09-06 22:57:00) [5]А как это "shared memory"???
Просто задача состоит в том, чтобы все процессы имели доступ к некоторой инфе, которую (я так думал) лучше писать/читать в/из файла. Раньше (без процессов) делал все в массиве структур, но надо улучшать проект, т. е. организовать парпаллельную работу большого кол-ва копий программ. Я бы не против на тот-же массив структур, но не знаю как это организовать. Ведь каждый процесс ( не каждый поток в одном процессе!!!) как отдельная программа со своими переменными. А как сделать для них общие переменные?!?!?
[NIKEL] (2002-09-06 08:20:00) [6]на счет >1000 я думаю товарисч погорячился :) я даже и не заметил :)
Можно посоветовать товарищу пересмотреть архитектуру и организацию программы или концепцию, так как из этого ничего хорошего не получится...
потоки хорошо работают когда они независимы. Но они начинают работать непродуктивно, когда они вынуждены синхронизироваться для доступа к общим ресурсам. Блокировка и критические секции отнюдь не добавляют бодрости системе.
Здесь лучше думать как избавиться от потоков или пересматривать форматы данных
MBo (2002-09-06 07:51:00) [7]>1000 (а может и больше) процессов
Действительно впечатляет ;)
ЮЮ (2002-09-06 07:47:00) [8]> 1000 (а может и больше) процессов
Не на одном же компе запущено столько процессов. A вы "shared memory" и т.п. Или на одном?
[NIKEL] (2002-09-06 07:42:00) [9]все пишут в shared memory а когда надо, все это скидываеться на диск
ЮЮ (2002-09-06 07:35:00) [10]> 1000(а может и больше) процессов
И при меньшем количестве переходим на сервера :-))
Пусть каждый пишет в свой файл. А на сервере объединять.
MBo (2002-09-06 06:41:00) [11]TMultiReadExclusiveWriteSynchronizer
nimble (2002-09-06 06:32:00) [12]Попробовать FileMapping!
Gene Green (2002-09-06 00:01:00) [13]А если организовать некий массив (стэк, очередь)? И другим процессом брать поочередно задачи и работать с файлом?