Concurrency is a lightweight portable library to handle thread synchronization through an efficient C++17 implementation of Queues and Latches. Concurrency enables using a few lines of code to implement the Producer-Consumer and Publisher-Subscribers problems.
#include <thread>
#include <iostream>
#include "rtb/concurrency/Concurrency.h"
using rtb::Concurrency::Queue;
Queue<int> q;
void produce(int n) {
for (int i{ 0 }; i < n; ++i) {
q.push(i);
}
q.close();
}
void consume() {
q.subscribe();
while (auto val{q.pop()}) {
cout << val.value() << endl;
}
q.unsubscribe();
}
int main() {
std::thread prodThr(&produce, 10);
std::thread consThr(&consume);
prodThr.join();
consThr.join();
return 0;
}
Check here for some further examples.
Previous versions of compilers might work but have not been fully tested. It should work in Clang on Mac, but it has not been tested.
Concurrency is a cross-platform library that relies on the CMake build system. Please refer to official CMake documentation for instructions on how to configure and build this library on the operating system and with the compiler/build environment that you are using.
Briefly, you can follow these instruction for compile Concurrency in Linux and Windows.
From the Concurrency directory run the following code
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -j2
make install
Using Git Bash and from the Concurrency directory run the following code
mkdir build
cd build
cmake -G "Visual Studio 16 2019" ..
cmake --build . --config Release --target install
After installation, create a Windows environment variable names Concurrency_DIR
which points at the installation directory. This will be used to eaily import Concurrency in your own project.
Once installed, you can use CMake to automatically find the Concurrency package
find_package(Concurrency REQUIRED)
Quickstart the development of your project using Concurrency.
Please see the file called LICENSE.txt.
Copyright (c) 2020 M. Reggiani, C. Pizzolato
Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
For help on building and using the Concurrency library, for bug reports, and for questions or suggestions use the GitHub issue tracking system.
If you are using Concurrency for your academic work, pleaser cosider citing the following paper
Pizzolato, C., Reggiani, M., Modenese, L., & Lloyd, D. G. (2017). Real-time inverse kinematics and inverse dynamics for lower limb applications using OpenSim. Comput Methods Biomech Biomed Engin, 20(4), 436-445. doi:10.1080/10255842.2016.1240789