MVV

|
Posted: Sun Aug 22, 2010 16:24 Post subject: |
|
|
Loopback wrote: | Правда, что касается базы, осталась одна проблема, которую пока не знаю, как решить. Если запущено две копии тотала и обе пытаются писать в один файл - будут проблемы. Хотя читать могут оба спокойно. Как корректно понять, что в данный момент в базу другим ProgMan13 wrote: | процессом выполняется запись - неясно. |
Мутексы в помощь. Перед запись создать мутекс, после - разрушить. Потом перед записью проверять наличие мутекса, например, секунд 10, если мутекс не разрушен - просто не записывать. |
А по-моему, тут спокойно и без мутексов можно обойтись - сам файл отлично сыграет роль мутекса:
Если надо выполнить запись в базу, чтобы вторая копия не смогла одновременно записать в тот же файл, но могла читать в это время, открываем файл на запись с флагом одновременного доступа FILE_SHARE_READ и без флага FILE_SHARE_WRITE. А если нужно, чтобы вторая копия и читать файл не могла, пока первая пишет в него, открываем без флагов одновременного доступа. После записи, естественно, закрываем файл. При этом при попытке открыть файл из другой копии в доступе будет отказано - и можно будет те же 10 секунд выждать и попытаться еще раз. В функции CreateFile за одновременный доступ отвечает параметр dwShareMode. И, по идее, более высокоуровневые средства записи в файл тоже должны поддерживать нечто подобное. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|