mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
33 lines
920 B
C++
33 lines
920 B
C++
#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);
|
|
|
|
///
|
|
}
|