From d98ac8bb082ec3282d332d5484c6e38e46b12317 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Fri, 1 Jan 2021 02:50:52 +0300 Subject: add example foo.cpp --- .github/workflows/test.yml | 23 ++++++++++++++++++++++- foo.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 foo.cpp diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e5118cc..bf87d6b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,6 +43,10 @@ jobs: - name: Checkout uses: actions/checkout@v2 + - name: Clean up PATH + uses: egor-tensin/cleanup-path@v1 + if: runner.os == 'Windows' + - name: Install Cygwin uses: egor-tensin/setup-cygwin@master with: @@ -55,4 +59,21 @@ jobs: platform: '${{ matrix.platform }}' cygwin: '${{ matrix.cygwin }}' - # I'm not really sure as to how to properly verify that it worked :-( + - name: Build foo.exe + run: | + $flags = @() + if ('${{ matrix.platform }}' -eq 'x86') { + $flags += '-m32' + } + $flags += @( + '-x', 'c++', + '-std=c++14', + '-o', 'foo', + 'foo.cpp', + '-lstdc++' + ) + if ('${{ runner.os }}' -eq 'Linux') { + $flags += '-lpthread' + } + & g++ $flags + & (Join-Path . foo) diff --git a/foo.cpp b/foo.cpp new file mode 100644 index 0000000..a7891bb --- /dev/null +++ b/foo.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include + +namespace { + +struct Counter { + std::mutex mtx; + std::size_t impl = 0; +}; + +void do_something(Counter& counter) { + std::lock_guard lck{counter.mtx}; + ++counter.impl; + std::cout << "Doing something #" << counter.impl << '\n'; +} + +} + +int main() { + try { + Counter counter; + std::array workers; + for (auto& worker : workers) { + worker = std::thread{&do_something, std::ref(counter)}; + } + for (auto& worker : workers) { + worker.join(); + } + } catch (const std::exception& e) { + std::cerr << e.what() << '\n'; + return 1; + } + return 0; +} -- cgit v1.2.3