Следующий простой интерфейс предназначен для предоставления доступа к стороннему API C++ из оболочки:
Код: Выделить всё
#include
#include
#include "thirdparty_api.hpp"
int main(int argc, char *argv[])
{
if (argc < 2) return EXIT_FAILURE;
std::cout tpapi_run b
another result
Теперь я хочу иметь возможность вызывать эту команду tpapi_run из нескольких разных параллельных процессов, однако сторонний ресурс не может обрабатывать несколько серий вызовов параллельно, поскольку его состояние должно инициализироваться повторно для каждого нового процесса (в противном случае результаты будут повреждены). Это означает, что первый процесс, вызывающий tpapi_run, должен монополизировать API и заставить остальных ждать в очереди, пока он не вызовет другую команду, скажем, tpapi_release, которая освободит ресурс и позволит следующему процессу выполнить свои вызовы. Следующий пример иллюстрирует последовательность между тремя процессами:
Код: Выделить всё
process_1: tpapi_run a > process_1 receives result corresponding to a
process_2: tpapi_run b > process_2 is waiting
process_3: tpapi_run c > process_3 is waiting
process_1: tpapi_run b > process_1 receives result corresponding to b
...
process_1: tpapi_release > process_2 receives result corresponding to b
process_2: tpapi_run a > process_2 receives result corresponding to a
...
process_2: tpapi_release > process 3 receives result corresponding to c
Существует ли библиотека или метод C++ для достижения этой цели?
Подробнее здесь:
https://stackoverflow.com/questions/793 ... d-resource