1

a() と b() をそれぞれ実行する 2 つのカーネル スレッドがあります。a() は、次のように b() を起こそうとしています。

a() {
    while(1) {
       while( atomic_read(status) != SET_SLEEP )
           msleep(10);

       atomic_set(status, SET_RUN);
       printk( "..." );
       wake_up( wq );
    }

b() {
    while(1) {
        atomic_set(status, SET_SLEEP);
        printk( "..." );
        wait_event( wq, atomic_read(status) != SET_SLEEP );
        printk( "..." );
    }

両方を長時間実行すると、システム全体がハングし、CPU の使用率が高くなります。パニックメッセージは出力されません。アイデアを持っている人はいますか?

4

2 に答える 2

0

ステータスにロックを設定してみてください。ロックは、CPU a のキャッシュ内のスタチューをメイン メモリにフラッシュし、CPU b が最新の更新を取得できるようにします。または、ステータスを揮発性に設定することもできます。

于 2013-10-17T12:02:17.297 に答える