Как построить такую логику с ресурсом?

Поддержка
  • Задача: чтоб каждый элемент из ресурса был использован к примеру, 20 раз, в разных потоках, с кол-вом одновременных использований = 1.
    Проблема в том, что взятый элемент из ресурса становится доступным для других потоков только после fail/success. После того как элемент из ресурса использован - далее он не требуется, но поток еще выполняет очень много действий (прежде, чем будет fail/success), и логичнее было бы, чтоб этот элемент взял другой поток. Как это сделать?

  • @arcos

    Вероятно, надо писать собственную логику раздачи данных потокам.

    В принципе, задача не выглядит сложной для человека, кто хорошо ориентируется во внутреннем API BAS. Я не такой человек.

    Рекомендую сразу писать так, чтобы можно было оформить в виде модуля, это заставит кодера сначала думать, а потом делать. Что всегда хорошо.

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

    На вскидку я вижу внешнее API так:

    • инициализация модуля с параметрами название ресурса, кол-во возможных повторных использований
    • getElemFromResource, param: ThreadId, resourceName, return: resourceValue, raises: elemNotAvailableError
    • freeElemFromResource, param: ThreadId, resourceName, resourceValue, return: reuseCount

    С внутренней реализацией надо думать после проектирования внешнего API.