問題タブ [ucontext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
355 参照

c - コンテキスト切り替えが同じステートメントを 2 回実行する

コンテキスト切り替えがどのように機能するか、および特定のシグナルを受信した後にプロセスがコンテキストを切り替える方法を学ぼうとしています。これが私のコードです

ここで、ターミナルから「kill -s SIGUSR1」コマンドを実行します。プロセスは、このシグナルを受信した後にコンテキストを切り替えますが、問題は、'calling thread for %d time'を 2 回出力することです。

たとえば、スレッド 1 が ' calling thread1 for 3rd time ' を出力してスリープ状態になり、スレッド 1 がスリープしている間にシグナルを送信してコンテキストを切り替えると、スレッド 2 が実行を開始し、もう一度シグナルを送信してコンテキストを切り替えると、スレッド 1 が再び「calling thread1」を出力する場合3回目」。理想的には、スリープ状態から抜け出し、a の値をインクリメントする必要がありますね。同じ値を 2 回出力するのはなぜですか?

コードで印刷された出力は次のとおりです。

受信信号 10

スレッド 2 からスレッド 1 への切り替え

thread2 を 1 回呼び出す

受信信号 10

スレッド 1 からスレッド 2 への切り替え

スレッド1を1回呼び出す

受信信号 10

スレッド 2 からスレッド 1 への切り替え

thread2 を 1 回呼び出す

受信信号 10

スレッド 1 からスレッド 2 への切り替え

スレッド1を1回呼び出す

これで私を助けてください。

0 投票する
1 に答える
2271 参照

c - コンテキストの切り替え - ここで makecontext と swapcontext が機能していますか (OSX)

コンテキスト切り替えを楽しんでいます。サンプルコードをファイルhttp://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.htmlにコピーしました

OSX用のマクロ_XOPEN_SOURCEを定義しました。

私はそれを構築します

gcc -o コンテキスト context.c -g

get、make、swap コンテキストが非推奨になっていることについて私に翼をつけます。うーん。

実行するとハングします。クラッシュしないようです。ハングするだけです。

gdb を使用してみましたが、一度 swapcontext に入ると空白になります。f1にはジャンプしません。Enterキーを押し続けると、カーソルがコンソールの新しい行に移動するだけですか?

何が起こっているのか分かりますか?Mac/deprecate メソッドでの作業と何か関係がありますか?

ありがとう