私のスタックにpthread_cond_waitを待っているコードがあります。シグナルは同じプロセスに送られますが、pthread_cond_waitを通知するシグナルハンドラには "pthread_cond_signal"コードはありませんが、それでもpthread_cond_waitは解放されます。待機を解除するために通常は "pthread_cond_wait"を行う他のスレッドがありますが、その時点ではアクティブではありません。pthread_cond_waitは完全に安全ですか?
0
A
答えて
1
pthread_cond_wait()
は、で、いつでも通知されていなくても、で起きることができます。
これは「見せかけの起動」と呼ばれ、正しいコードは、これを処理しなければならない - ほとんどの場合、pthread_cond_wait()
を呼び出すための正しい方法は次のように構造化ループ内にある:
condition_waiting_for
が終わった状態である while (!condition_waiting_for)
pthread_cond_wait(&cond, &mutex);
スレッドが真になるのを待っているプログラムの共有状態です(たとえば、「ジョブキューは空ではありません」)。
このようにpthread_cond_wait()
コールを構成すると、信号によって引き起こされる可能性のある起動を含む偽のウェークアップは、プログラムの正確さに影響しません。
0
pthread_cond_signal
またはpthread_cond_broadcast
によって通知することができる。pthread_cond_wait
。
また、pthreadはpthread_cancel
で取り消すことができます。これはスレッドに取り消し要求を送信します。スレッドのキャンセル要求を送信した後、戻りコードを調べて、スレッドが実際にキャンセルされたことを確認する必要があります。
how to kill a pthreadについて議論する良いスレッドがあります。
関連する問題
- 1. createTextNodeはHTMLインジェクションとXSSから完全に安全ですか?
- 2. 990pxはウェブページの完全な安全な幅ですか、または980px以下で安全ですか?
- 3. MediaProjectionで完全に安全なビューを非表示 - android
- 4. ブーストメッセージキューのスレッドは安全でプロセスは安全ですか?
- 5. 引数を環境変数に渡すと、完全に安全ですか?
- 6. `npm`を` yarn`に完全に置き換えても安全ですか?
- 7. 安全で安全なセッション名とは何ですか?
- 8. は安全に
- 9. "User.Identity.Name"は安全ですか?
- 10. PhoneGapは安全ですか?
- 11. req.refererは安全ですか?
- 12. Context.MODE_PRIVATEは安全ですか?
- 13. フォームは安全ですか?
- 14. SecureStringは安全ですか?
- 15. window.screenは安全ですか?
- 16. signed_requestは安全ですか?
- 17. Locale.setDefault()は安全ですか?
- 18. Flex:removeEventListenerは安全ですか?
- 19. HttpUtility.HtmlEncodeは安全ですか?
- 20. JDBCは安全ですか?
- 21. NetworkStreamは安全ですか?
- 22. StrToInt()は安全ですか?
- 23. カピストラーノは安全ですか?
- 24. Reduxは安全ですか?
- 25. セッションを安全にカウントする方法:Session_Start/End in Global.Asaxは安全で安全ですか?
- 26. For ...各文は完全に完全なのですか?
- 27. JAXBは同時アクセスで安全ですか?(完了方法)
- 28. SAS Google Map Generator、安全なデータで安全ですか?
- 29. VS2008 Xamlエディタは完全に不安定です
- 30. は完全に
私の質問は異なります。私はそれがユーザー定義のもののような他の信号から安全かどうかを尋ねています。 sem_waitが完全にシグナルセーフではないことを知っているので、チェックアウトhttps://linux.die.net/man/3/sem_wait - >シグナルハンドラは、使用に関係なく、これらの関数の1つにブロックされた呼び出しを常に中断しますsigaction(2)のSA_RESTARTフラグ – aTJ