_Task T {
    const int tid;
    std::string name;

    void f(int param) {
        if ( param != 0 ) f( param - 1 );	// recursion
	for ( volatile size_t i = 0; i < 100000000; i += 1 ); // delay
        int x = 3;
        std::string y = "example";
    }						// breakpoint
    void main() {
	if ( tid != 0 )				// T0 goes first
	    for ( volatile size_t i = 0; i < 1000000000; i += 1 ) // delay
		if ( i % 10000000 == 0 ) yield(); // execute other tasks
        f(3);
    }
  public:
    T(const int tid) : tid( tid ) {
        name = "T" + std::to_string(tid);
        setName(name.c_str());
    }
};
int main() {
    uProcessor procs[3];			// extra processors
    const int numTasks = 10;
    T * tasks[numTasks];			// extra tasks
    // allocate tasks with different names
    for (int id = 0; id < numTasks; id += 1) {
        tasks[id] = new T(id);
    }
    // deallocate tasks
    for (int id = 0; id < numTasks; id += 1) {
        delete tasks[id];
    }
}

// Local Variables: //
// compile-command: "u++-work test.cc -g -multi" //
// End: //
