とりあえずTestという何もしないクラスを作った
class Test{
};
これを2つのタスクからアクセスしてみた
void taskA(){ for(;;){ Test test; } } void taskB(){ for(;;){ Test test; } }
しかし、これは止まらなかった。次にTestにstaticで何もしないメソッドを加え、これを2つのタスクから実行してみた。
class Test{ public: static void test(); }; void Test::test(){ }
void taskA(){ for(;;){ Test::test(); } } void taskB(){ for(;;){ Test::test(); } }
しかし、これも止まらず、普通に動いていた。なのでTest::testからasmHLTを呼び出させたらどうなるか試してみた
class Test{ public: static void test(); }; void Test::test(){ asmHLT(); }
こうしたら、見事にqemuが止まった。次にTest::testに適当な処理を書いてみた。
class Test{ public: static void test(); }; void Test::test(){ int i = 0; i++; }
こうしたら普通に動いていた。止まる原因はわからないままだけど、だんだん、動く場合と止まる場合がわかってきた。