Форум: "Базы";
Текущий архив: 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.05 c