マルチスレッドプログラミング相談室 その9

439デフォルトの名無しさん
垢版 |
2021/03/04(木) 23:27:05.69ID:320wEDvY
_beginthreadex() を使ったマルチスレッドプログラムについて質問です。
この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために
タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」
とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?
2021/03/05(金) 15:45:04.28ID:0Dz+Yobc
>成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。

>_Beginthread よりも _beginthreadex を使用する方が安全です。 _Beginthread によって生成されるスレッドが短時間で終了した場合は、 _beginthread の呼び出し元に返されるハンドルが無効であるか、別のスレッドを指している可能性があります。 ただし、 _beginthreadex によって返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、 _beginthreadex がエラーを返さなかった場合は、有効なハンドルであることが保証されます。


ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから
441sage
垢版 |
2021/03/06(土) 05:17:04.33ID:0GCeIGT3
>>440
ご返信ありがとうございます。概ね理解できました。
勉強不足で、マルチスレッドの仕組みについて誤解していたようです。
442デフォルトの名無しさん
垢版 |
2021/03/06(土) 11:08:41.13ID:pd/Aiz5V
ちなみにCentOSはスレッドのコアが指定できるよ。
2021/03/06(土) 11:30:24.47ID:UzpsIFsk
macOSだとコア指定できない。
444デフォルトの名無しさん
垢版 |
2021/03/06(土) 13:08:47.51ID:VGFn/kw3
あわしろ氏によると、Macは既にオワコンなので、WSLを使うと良いらしい。
445デフォルトの名無しさん
垢版 |
2021/03/25(木) 15:15:49.52ID:LuSagST9
針に糸を通す( thread a needle
糸をつむぐ( spin thread [yarn]
糸が切れた( The thread broke.
琴の糸を締める( tighten a string of a koto
糸をかき鳴らす( strum the strings
2021/04/03(土) 09:59:34.29ID:CHs8071g
このスレ来年で10年か
スレ推奨図書とかないの?
2022/04/14(木) 16:49:21.50ID:wwxSZsaE
マルチスレッド処理の花形といえばハードなリアルタイムスレッドとバックグラウンドスレッドの間のデータのやり取りだと思ってるんだが
スレの過疎っぷりを見るに、殆どの人にとって必要のないものだったんだな
2022/05/26(木) 01:42:01.15ID:EhvYdlEg
>>447
MS-DOS のデバイスドライバにでも痕跡が残っていたような‥
どうするつもりだったんだろう?
2022/05/26(木) 16:41:59.49ID:kr4vk/7I
>>447
ハードな略が動いている間はバック略を動かさないから大して考えることは無い
DOSの頃と同じだな
450デフォルトの名無しさん
垢版 |
2023/10/18(水) 18:12:44.04ID:k+tvnK8M
>>432
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
451デフォルトの名無しさん
垢版 |
2023/10/18(水) 18:13:06.20ID:k+tvnK8M
>>432
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
452デフォルトの名無しさん
垢版 |
2023/10/18(水) 18:16:53.34ID:k+tvnK8M
>>450-451
あ”、二重投稿になったか。

えっと、ちょっと補完。
サブスレッドの処理についてはループして待たせておく。終わったら終了を知らせるイベントを発生させる。
453デフォルトの名無しさん
垢版 |
2023/10/19(木) 01:25:35.07ID:8UDFhheE
>>365
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。
2023/10/19(木) 01:28:22.25ID:8UDFhheE
>>16
 あれって、OSの機能だから気にしなくても良いというのでは駄目か?
2025/05/12(月) 13:23:26.42ID:Zw0HuL6G
1000msecでコンテキストスイッチ何回発生するんだこれ
2025/05/12(月) 13:41:45.50ID:zCv6/zTu
ここで multi process な質問は反則?
457デフォルトの名無しさん
垢版 |
2025/05/13(火) 15:19:11.88ID:lpqGnCjc
高級言語しか使えない身で話すけど
Pythonで超重量級のCPU処理とOpenAIに対するリクエストで数秒I/Oに飛ぶ処理の二つがそれぞれタスクに分解されてるとき、
前者のタスクが処理完了すると後者のタスクで数個~数十個くらいタスクが新規作成されて、(c, c, c, i, i, i, i, i, i, c, i, i,...)
内部どうなってるのか知らんけどI/OでGIL解放されても後続のタスクが何個も後者のタスクだから前者のタスクがくそ遅延するってあり得る?
両者のタスクを別々のプロセスに切り分けたら前者のタスクが遅延するとかいうことなくなったんだけどさ
2025/05/14(水) 17:07:33.93ID:uDIzjmjF
そういう場合
同じ状況になる再現コードを貼りましょう
459デフォルトの名無しさん
垢版 |
2025/05/14(水) 17:34:26.40ID:Ga6mti+e
5次方程式に新公式を発見:ルートを超える新理論
2025.05.14 17:05:56 WEDNESDAY
https://nazology.kusuguru.co.jp/archives/177496
>>オーストラリアのニューサウスウェールズ大学(UNSW)で行われた研究
プログらまーも覚えるとよい

125年越しに解決したかもしれない「ヒルベルトの第6問題」とは?
2025年05月10日 15時00分
https://gigazine.net/news/20250510-hilberts-6th-problem-solved/
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況