mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
Reorganizing REPO
git-svn-id: svn://ultimatepp.org/upp/trunk@11631 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
11d9ba9e65
commit
afb3d587da
83 changed files with 10859 additions and 10821 deletions
33
tutorial/CoreTutorial/CoLoop.cpp
Normal file
33
tutorial/CoreTutorial/CoLoop.cpp
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#include "Tutorial.h"
|
||||
|
||||
void CoLoopTutorial()
|
||||
{
|
||||
/// .CoWork loop method
|
||||
|
||||
/// An alternative to `CoPartition` is 'loop' method of `CoWork` (`Loop` method with synonym
|
||||
/// `operator*`). In this pattern, the job is simply started in all threads and the code is
|
||||
/// responsible for scheduling the work. `Loop` / `operator*` waits for all started threads
|
||||
/// to finish. For scheduling, it is possible to use internal `CoWork` index counter,
|
||||
/// which is set to 0 at the start of `Loop` / `operator*`. This way, the overhead associated
|
||||
/// with creating lambdas and scheduling them is kept to the minimum.
|
||||
|
||||
Vector<String> data;
|
||||
for(int i = 0; i < 100; i++)
|
||||
data.Add(AsString(1.0 / i));
|
||||
|
||||
double sum = 0;
|
||||
|
||||
CoWork co;
|
||||
co * [&] {
|
||||
int i;
|
||||
double m = 0;
|
||||
while((i = co.Next()) < data.GetCount())
|
||||
m += atof(data[i]);
|
||||
CoWork::FinLock();
|
||||
sum += m;
|
||||
};
|
||||
|
||||
DUMP(sum);
|
||||
|
||||
///
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue