Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
4-1106418104
vet
2005-01-22 21:21
2005.03.06
"Сводка" свойств файла


4-1106433800
Unleashed
2005-01-23 01:43
2005.03.06
Setupdi функции


14-1108675948
Гость
2005-02-18 00:32
2005.03.06
Возможно ли одновременно подключить


10-1084796970
VK220
2004-05-17 16:29
2005.03.06
Здравствуйте! Если функция _AddRef вызывается при любом обращении


14-1108151528
Fin
2005-02-11 22:52
2005.03.06
Две звуковые карты.




   Наверх