На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Синхронизация потоков и БД.
      Есть таблица БД - содержащая список заданий.
      Есть потоки берущие задания из БД для своей работы.
      На форме отображена таблица. Каждый поток берет себе задание и отмечает что взятое задание обрабатывается.
      Пользователь весь процесс может обработки может наблюдать на экране.

      Надо создать еще одно подключение к БД таблицы с запросом показывающим только свободные задания. Что бы поток взял первое свободное задание из списка.

      Вопрос 1. Как лучше создать дополнительную таблицу? Одну общею или каждому потоку по экземпляру?
      Вопрос 2. Каким образом это все синхронизовать что бы потоки не начали работать над одной и той же записью в своем экземпляре. Будет ли достаточно работать через функцию Senhronize или нужно применять что то по сложнее?.
        Решил создать одну общею таблицу и синхронизировать доступ при помощи критической секции.
          SQL запросы уже не в моде?
            Подскажите где можно подсмотреть пример. Как поставить задания для потоков в очередь и при помощи симофоров эти задания выполнить нескольким потоками?

            Добавлено
            Цитата mishapk @
            SQL запросы уже не в моде?

            Именно SQL я и собираюсь фильтровать занятые задания. Но хотелось бы найти более грамотный подход не используя БД для списка заданий а применить что то типа очереди сообщений. Хочу разобраться как это можно сделать при помощи семафоров.
              Не нужно мешать все в одну кучу! Разнеси все возникающие вопросы по "зонам ответственности", а именно:

              1) Нужна только одна таблица с заданиями, у которой для каждого задания (записи таблицы) есть поле состояния ("Ожидает", "Исполняется", "Готово")
              2) Есть выделенный поток, который занимается чтением-записью из базы
              3) Есть куча потоков, которые обращаются к потоку 2 с заданиями на работу с базой - "получить задание", "отчитаться об исполнении"
              4) Есть GUI-поток, который обращается к потоку 2 с заданием на "обновление таблицы на форме"

              При таком подходе ты избавишься от блокировок на уровне БД, а это ускорит работу и упростит программинг.
              Хотя, если исполнение заданий происходит гораздо быстрее работы с базой ... возможны варианты и эксперименты, но если обработка на порядки длительнее, чем работа с БД ... см.п.1-4.

              Все ИМХО.
                Цитата yashum @
                У вас проблема с корневым узлом. Сначала необходимо восстановить эту информационную базу, а потом все подчиненные узлы. Поэтапно, как устранить эту проблему описано тут http://www.modber.ru/catalog/item2059.html . Удачи.


                Пост ни разу не по теме. "Ненавязчивая реклама" своего сайта по тематике 1С.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0219 ]   [ 16 queries used ]   [ Generated: 28.03.24, 22:17 GMT ]