Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
1-1108652887
Георгий Бедный
2005-02-17 18:08
2005.03.06
Легенда о калькуляторе


11-1089554522
Андрей
2004-07-11 18:02
2005.03.06
ToolBar - Решение странной проблемы


14-1108560041
kaZaNoVa
2005-02-16 16:20
2005.03.06
RSA-шифрование


1-1108637607
Lord Zmiy
2005-02-17 13:53
2005.03.06
Замена KEY


6-1104069043
INCOGNITO
2004-12-26 16:50
2005.03.06
Прослушивание порта...