Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

Edit.........Post и синхронизация вызовов   Найти похожие ветки 

 
Eraser ©   (2005-02-06 19:37) [0]

Имеется БД в виде одной таблицы dbf :)
Вызовы к БД происходят из основного потока, но может возникнуть ситуация, когда, например, пользователь редактирует информацию и в этот момент прийдёт некое внешнее сообщение, которое вызовет процедуру модификации этой БД.

Вопрос. Нужно ли защищать методы edit (append)....post например мьютексами? Т.е.
   WaitForSingleObject(mxDBClient, INFINITE);
   edit;
   .......................
   post;


 
sniknik ©   (2005-02-07 02:12) [1]

сообщение из другого потока в основном будет обрабатываться в порядке обшей очереди (если это сообщение конечно, а не прямой вызов метода)


 
Eraser ©   (2005-02-07 13:25) [2]

Т.е. не может сложиться ситуация, когда пользователь жмёт "OK" и в этот же момент приходит сообщение, в результате чего или пользователю или сообщению будет отказано в доступе к БД?


 
sniknik ©   (2005-02-07 13:57) [3]

да ктож его знает? как приложение написано, гарантий давать нельзя.

если у тебя вся работа с базой идет в основном потоке и из дополнительного приходит только сообщение в основной (как я понял из вопроса), то не должно. (речь не об отказе в доступе, это может и по другим причинам, а о "пересечении" когда один ресурс из двух мест одновременно затребован)


 
msguns ©   (2005-02-07 14:09) [4]

Потоки, процессы, "трубы" - это все программные мульки, реализующие мультиобработку кода, но никаким образом не влияющие на "сервер". Он их обрабатывает, совершенно не подозревая о каких-то там внутренних параллированиях и сообщениях. Если, конечно, не брать во внимание саму программную реализацию сервера ;) "Клиенты" же для него все одинаковы (не углубляясь в нюансы типа блокировок, приоритетов и ролей)


 
sniknik ©   (2005-02-07 15:35) [5]

msguns ©   (07.02.05 14:09) [4]
а тут вопрос не про сервер (отдельная песня), а про то как на клиенте "рулить" одной базой(коннектом) из разных потоков. (это как сам понял, возможно ошибаюсь)
а раз так то основная проблема в том чтобы не выполнить delete (к примеру) из дополнительного потока в то время как эта самая таблица чей метод вызывается (пытается, т.к. скорее рухнет чем выполнится) усиленно узается для foolscan-а.


 
msguns ©   (2005-02-07 16:56) [6]

>sniknik ©   (07.02.05 15:35) [5]

Я вообще не понимаю, зачем удаление и перечитку делать в разных потоках. ИМХО, чел явно ищет себе проблемы на ровном месте.


 
Anatoly Podgoretsky ©   (2005-02-07 17:06) [7]

на одно место


 
Eraser ©   (2005-02-07 20:24) [8]

msguns ©
Anatoly Podgoretsky


В вопросе я ясно сказал, что вызов происходит из ОСНОВНОГО потока. А вот sniknik хорошо подметил, что вызов происходит не из сообщения Windows, а функцией, синхронизированной с основным потоком.

Я вообще не понимаю, зачем удаление и перечитку делать в разных потоках.

Повторюсь. ВСЕ операции с БД происходят только в основном потоке, но я где-то слышал, может это не правда, что может возникнуть эффект псевдо-многопоточности, т.е. функция может быть прервана для обработки сообщения. Мне кажется тут что-то не так...


 
Eraser ©   (2005-02-08 15:43) [9]

Ну так есть у кого-нибудь соображения? Наверняка же сталкивались с такой ситуацией ;-)

Не хотелось бы оставлять в программе потенциальные глюки...

Ещё раз повторю вопрос. Нужно ли обращения к DB защищать мьютексами (или кретическими секциями), если обращения к этой БД происходят только из основного потока, или функций, которые синхронизированы с ним?


 
msguns ©   (2005-02-08 16:26) [10]

Любое обращение к потенциально опасным участкам кода, в т.ч. к тем, которые юзают "движки" и серверы БД, надо защищать, предусматривая обработку ошибок.


 
Eraser ©   (2005-02-08 16:48) [11]

msguns

Так и сделаю. Благодарю.


 
Alexander Panov ©   (2005-02-08 17:01) [12]

Eraser ©   (08.02.05 15:43) [9]
Нужно ли обращения к DB защищать мьютексами (или кретическими секциями), если обращения к этой БД происходят только из основного потока,


Нет, не нужно.
У тебя логика приложения должна быть такой, чтобы одновременный доступ к записи не был возможен.
По существу, нужно делать полноценную эмуляцию блокировок.

Если же используется готовая БД, уже поддерживающая блокировки, то делать не нужно вообще ничего для защиты кода.


 
sniknik ©   (2005-02-08 17:08) [13]

> если обращения к этой БД происходят только из основного потока, или функций, которые синхронизированы с ним?
т.е. все обрабатывается в основном. (синхронизация это тоже в основном)

что от чего зашишать? (если конечно написано так как описано ;о))

Eraser ©
не кажется что разговор какойто непредметный пошол? (а вобщемто, он и не начинался ;)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
1-1108585953
Арбузов
2005-02-16 23:32
2005.03.06
Нужен наглядный пример создания формы в рантайме


1-1109016306
Wonderer
2005-02-21 23:05
2005.03.06
Товарищ Панов! Это что, не тема сообщения?


1-1108993340
АМБ
2005-02-21 16:42
2005.03.06
Hint


1-1108629913
Slaga
2005-02-17 11:45
2005.03.06
Плагины для дельфи


1-1108563511
TeNY
2005-02-16 17:18
2005.03.06
как зная Pointer загрузить строку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский