Index: src/tests/.expect/thread.txt
===================================================================
--- src/tests/.expect/thread.txt	(revision 0c92c9f0632273f81f11622ea9a570797b9c7092)
+++ src/tests/.expect/thread.txt	(revision 0c92c9f0632273f81f11622ea9a570797b9c7092)
@@ -0,0 +1,22 @@
+User main begin
+First : Suspend No. 1
+First : Suspend No. 2
+First : Suspend No. 3
+First : Suspend No. 4
+First : Suspend No. 5
+First : Suspend No. 6
+First : Suspend No. 7
+First : Suspend No. 8
+First : Suspend No. 9
+First : Suspend No. 10
+Second : Suspend No. 1
+Second : Suspend No. 2
+Second : Suspend No. 3
+Second : Suspend No. 4
+Second : Suspend No. 5
+Second : Suspend No. 6
+Second : Suspend No. 7
+Second : Suspend No. 8
+Second : Suspend No. 9
+Second : Suspend No. 10
+User main end
Index: src/tests/thread.c
===================================================================
--- src/tests/thread.c	(revision 0c92c9f0632273f81f11622ea9a570797b9c7092)
+++ src/tests/thread.c	(revision 0c92c9f0632273f81f11622ea9a570797b9c7092)
@@ -0,0 +1,43 @@
+#include <fstream>
+#include <kernel>
+#include <stdlib>
+#include <threads>
+
+struct First { thread t; simple_lock* lock; };
+struct Second { thread t; simple_lock* lock; };
+
+DECL_THREAD(First)
+DECL_THREAD(Second)
+
+void ?{}( First * this, simple_lock* lock ) { this->lock = lock; }
+void ?{}( Second * this, simple_lock* lock ) { this->lock = lock; }
+
+void main(First* this) {
+	for(int i = 0; i < 10; i++) {
+		sout | "First : Suspend No." | i + 1 | endl;
+		yield();
+	}
+	unlock(this->lock);
+}
+
+void main(Second* this) {
+	lock(this->lock);	
+	for(int i = 0; i < 10; i++) {
+		sout | "Second : Suspend No." | i + 1 | endl;
+		yield();
+	}
+}
+
+
+int main(int argc, char* argv[]) {
+	simple_lock lock;
+	sout | "User main begin" | endl;
+	{
+		// processor p;
+		{
+			scoped(First)  f = { &lock };
+			scoped(Second) s = { &lock };
+		}
+	}
+	sout | "User main end" | endl;
+}
