マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

止まる原因はわからないけど、だんだんわかってきた

とりあえず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++;
}

こうしたら普通に動いていた。止まる原因はわからないままだけど、だんだん、動く場合と止まる場合がわかってきた。