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"; +