Previous: Allocating Processor Objects Up: Processor Objects Next: Deallocating Processor Objects

Using Processor Object Pointers

A processor object acts like any other C++ object: it stores data members and can be requested to perform member functions on that data. Invoking a member function of a processor object through a global pointer to that processor object results in a thread of control being created to perform that member function. When the member function terminates, that thread is terminated. Multiple member functions can be executing on a processor object simultaneously.

These member functions might return global pointers to objects in the processor object. For instance, in our mergesort we need a global pointer to the DList_removing object in a Merger in order to construct a Sorter object. Thus, member functions ( get_in1() and get_in2()) in type Merger return global pointers to their DList_removing members.

Thus, we could create a mergesort with two sorters and one merger as follows:


{
  proc_t merger_placement("pobj_Merger.out",argv[2]);
  proc_t sorter0_placement("pobj_Sorter.out",argv[3]);
  proc_t sorter1_placement("pobj_Sorter.out",argv[4]);

Sorter *global sorters[2]; Merger *global merger;

// Create Merger Processor Object DList_removing* final_output = new DList_removing(); merger = new (merger_placement) Merger(final_output);

// Create Sorter Processor Objects DList_removing *global merger_left_input = merger->get_in1(); sorters[0] = new (sorter0_placement) Sorter(merger_left_input,0,N/2);

DList_removing *global merger_right_input = merger->get_in2(); sorters[1] = new (sorter1_placement) Sorter(merger_right_input,N/2,N); }

paolo@cs.caltech.edu