Changes in doc/uC++toCFA/uC++toCFA.tex [0cb3479:135a2d8]
- File:
-
- 1 edited
-
doc/uC++toCFA/uC++toCFA.tex (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/uC++toCFA/uC++toCFA.tex
r0cb3479 r135a2d8 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Mon Nov 11 21:51:39202414 %% Update Count : 61 4413 %% Last Modified On : Fri Nov 8 08:22:25 2024 14 %% Update Count : 6107 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 498 498 499 499 500 \section{Coroutine }500 \section{Coroutines} 501 501 502 502 \begin{cquote} … … 591 591 592 592 struct StrMsg : @public uActor::Message@ { 593 594 593 const char * val; // string message 594 595 595 596 596 StrMsg( const char * val ) : … … 600 600 _Actor Hello { ${\color{red}\LstCommentStyle{// : public uActor}}$ 601 601 Allocation receive( Message & msg ) { 602 Case( @StartMsg@, msg ) { // discriminate 603 604 } else Case( StrMsg, msg ) { 602 Case( StrMsg, msg ) { // discriminate 605 603 osacquire( cout ) << msg_d->val << endl; 606 607 } else Case( @StopMsg@, msg ) 608 return Delete; // delete actor 609 return Nodelete; // reuse actor 604 }; 605 return Delete; // delete after use 610 606 } 611 607 }; 612 608 int main() { 613 609 @uActor::start();@ // start actor system 614 *new Hello() | uActor::startMsg 615 | *new StrMsg( "hello" ) | uActor::stopMsg; 616 *new Hello() | uActor::startMsg 617 | *new StrMsg( "bonjour" ) | uActor::stopMsg; 618 @uActor::stop();@ // wait for actors to terminate 610 *new Hello() | *new StrMsg( "hello" ); 611 *new Hello() | *new StrMsg( "bonjour" ); 612 @uActor::stop();@ // wait for all actors to terminate 619 613 } 620 614 \end{uC++} … … 629 623 const char * val; // string message 630 624 }; 631 void ?{}( StrMsg & msg, const char * str ) { 625 void ?{}( StrMsg & msg, char * str ) { 626 msg.val = str; 632 627 @set_allocation( msg, Delete );@ // delete after use 633 msg.val = str; 634 } 635 struct Hello { @inline actor;@ }; // derived actor 636 allocation receive( Hello & receiver, @start_msg_t@ & ) { 637 return Nodelete; 638 } 628 } 629 struct Hello { 630 @inline actor;@ // derived actor 631 }; 639 632 allocation receive( Hello & receiver, StrMsg & msg ) { 640 633 mutex( sout ) sout | msg.val; 641 return Nodelete; // reuse actor 642 } 643 allocation receive( Hello & receiver, @stop_msg_t@ & ) { 644 return Delete; // delete actor 634 return Delete; // delete after use 645 635 } 646 636 647 637 int main() { 648 @actor_start();@ // start actor system 649 *(Hello *)new() | start_msg 650 | *(StrMsg *)new( "hello" ) | stop_msg; 651 *(Hello *)new() | start_msg 652 | *(StrMsg *)new( "bonjour" ) | stop_msg; 653 @actor_stop();@ // wait for actors to terminate 654 } 655 \end{cfa} 656 \end{tabular} 657 \end{cquote} 658 659 660 \section{Thread} 638 @start_actor_system();@ // start actor system 639 *(Hello *)new() | *(StrMsg *)new( "hello" ); 640 *(Hello *)new() | *(StrMsg *)new( "bonjour" ); 641 @stop_actor_system();@ // wait for all actors to terminate 642 } 643 \end{cfa} 644 \end{tabular} 645 \end{cquote} 646 647 648 \section{Threads} 661 649 662 650 \begin{cquote} … … 722 710 723 711 724 \section{Monitor }712 \section{Monitors} 725 713 726 714 Internal Scheduling … … 788 776 \end{tabular} 789 777 \end{cquote} 790 791 \newpage 792 778 \enlargethispage{1000pt} 793 779 External Scheduling 794 780 \begin{cquote}
Note:
See TracChangeset
for help on using the changeset viewer.