From 52d5b0be15e081f06b954e68ad3cffbd2fd47dfc Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 5 Dec 2016 22:01:32 +0000 Subject: [PATCH] CoWorkerResources git-svn-id: svn://ultimatepp.org/upp/trunk@10525 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- .../CoWorkerResources/CoWorkerResources.cpp | 34 +++++++++++++++++++ .../CoWorkerResources/CoWorkerResources.upp | 9 +++++ 2 files changed, 43 insertions(+) create mode 100644 reference/CoWorkerResources/CoWorkerResources.cpp create mode 100644 reference/CoWorkerResources/CoWorkerResources.upp diff --git a/reference/CoWorkerResources/CoWorkerResources.cpp b/reference/CoWorkerResources/CoWorkerResources.cpp new file mode 100644 index 000000000..009abbdde --- /dev/null +++ b/reference/CoWorkerResources/CoWorkerResources.cpp @@ -0,0 +1,34 @@ +#include + +using namespace Upp; + +struct Model { // some computation model that is not stateless, abstract definition + virtual void Start(int i) = 0; + virtual int Compute() = 0; +}; + +struct Model1 : Model { // concrete model (there would be more) + int n; + + virtual void Start(int i) { n = i; } + virtual int Compute() { return n++; } +}; + +CONSOLE_APP_MAIN +{ + Vector data; + data.SetCount(3000); + + CoWorkerResources> res; + for(auto& r : res) + r.Create(); + + CoPartition(0, data.GetCount(), [&data, &res](int l, int h) { + Model& m = *~res; // gets resource unique for worker + m.Start(l); + for(int i = l; i < h; i++) + data[i] = m.Compute(); + }); + + DUMP(data); +} diff --git a/reference/CoWorkerResources/CoWorkerResources.upp b/reference/CoWorkerResources/CoWorkerResources.upp new file mode 100644 index 000000000..6a828ecae --- /dev/null +++ b/reference/CoWorkerResources/CoWorkerResources.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + CoWorkerResources.cpp; + +mainconfig + "" = "MT"; +