#include #include #include #include struct First { thread_desc __thrd; signal_once* lock; }; struct Second { thread_desc __thrd; signal_once* lock; }; DECL_THREAD(First); DECL_THREAD(Second); void ?{}( First * this, signal_once* lock ) { this->lock = lock; } void ?{}( Second * this, signal_once* lock ) { this->lock = lock; } void ^?{}( First * mutex this ) {} void ^?{}( Second * mutex this ) {} void main(First* this) { for(int i = 0; i < 10; i++) { sout | "First : Suspend No." | i + 1 | endl; yield(); } signal(this->lock); } void main(Second* this) { wait(this->lock); for(int i = 0; i < 10; i++) { sout | "Second : Suspend No." | i + 1 | endl; yield(); } } int main(int argc, char* argv[]) { signal_once lock; sout | "User main begin" | endl; { processor p; { scoped(First) f = { &lock }; scoped(Second) s = { &lock }; } } sout | "User main end" | endl; }