Show
Ignore:
Timestamp:
08/31/07 14:59:10 (1 year ago)
Author:
Gregor
Message:

tango/scrapple/thread/Actor.d: Added an enqueueSync that synchronizes on multiple messages.

tests/shakematrix.d: And used it.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/tango/scrapple/thread/Actor.d

    r23 r25  
    8989        } 
    9090 
     91        /** Enqueue a group of messages and wait for all of them (really only 
     92            useful with a Dispatcher or some other delegating actor) */ 
     93        void enqueueSync(Message[] msgs) 
     94        { 
     95            // make all our semaphores 
     96            Semaphore[] sems; 
     97            sems.length = msgs.length; 
     98            foreach (i, m; msgs) { 
     99                sems[i] = new Semaphore; 
     100            } 
     101 
     102            // enqueue all the messages 
     103            foreach (i, m; msgs) { 
     104                enqueue(new SyncMessage(sems[i], m)); 
     105            } 
     106 
     107            // then wait on all the semaphores 
     108            foreach (s; sems) { 
     109                s.wait(); 
     110            } 
     111        } 
     112 
    91113        /** Enqueue a delegate to be called */ 
    92114        void enqueueDelegate(void delegate() d)