source: src/tests/thread.c@ 9c14ae9

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 9c14ae9 was cb0e6de, checked in by Thierry Delisle <tdelisle@…>, 9 years ago

Threads now use monitor semantics to wait until completion

  • Property mode set to 100644
File size: 940 bytes
RevLine 
[0c92c9f]1#include <fstream>
2#include <kernel>
3#include <stdlib>
[4a3334cf]4#include <thread>
[0c92c9f]5
[17af7d1]6struct First { thread_desc __thrd; signal_once* lock; };
7struct Second { thread_desc __thrd; signal_once* lock; };
[0c92c9f]8
[77e6fcb]9DECL_THREAD(First);
10DECL_THREAD(Second);
[0c92c9f]11
[ee897e4b]12void ?{}( First * this, signal_once* lock ) { this->lock = lock; }
13void ?{}( Second * this, signal_once* lock ) { this->lock = lock; }
[0c92c9f]14
[cb0e6de]15void ^?{}( First * mutex this ) {}
16void ^?{}( Second * mutex this ) {}
17
[0c92c9f]18void main(First* this) {
19 for(int i = 0; i < 10; i++) {
20 sout | "First : Suspend No." | i + 1 | endl;
21 yield();
22 }
[ee897e4b]23 signal(this->lock);
[0c92c9f]24}
25
26void main(Second* this) {
[ee897e4b]27 wait(this->lock);
[0c92c9f]28 for(int i = 0; i < 10; i++) {
29 sout | "Second : Suspend No." | i + 1 | endl;
30 yield();
31 }
32}
33
34
35int main(int argc, char* argv[]) {
[ee897e4b]36 signal_once lock;
[0c92c9f]37 sout | "User main begin" | endl;
38 {
[ee897e4b]39 processor p;
[0c92c9f]40 {
41 scoped(First) f = { &lock };
42 scoped(Second) s = { &lock };
43 }
44 }
45 sout | "User main end" | endl;
46}
Note: See TracBrowser for help on using the repository browser.