マルチスレッドプログラミング相談室 その9at TECH
マルチスレッドプログラミング相談室 その9 - 暇つぶし2ch439:デフォルトの名無しさん
21/03/04 23:27:05.69 320wEDvY.net
_beginthreadex() を使ったマルチスレッドプログラムについて質問です。
この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために
タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」
とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?

440:デフォルトの名無しさん
21/03/05 15:45:04.28 0Dz+Yobc.net
>成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。

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


ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから

441:sage
21/03/06 05:17:04.33 0GCeIGT3.net
>>440
ご返信ありがとうございます。概ね理解できました。
勉強不足で、マルチスレッドの仕組みについて誤解していたようです。

442:デフォルトの名無しさん
21/03/06 11:08:41.13 pd/Aiz5V.net
ちなみにCentOSはスレッドのコアが指定できるよ。

443:デフォルトの名無しさん
21/03/06 11:30:24.47 UzpsIFsk.net
macOSだとコア指定できない。

444:デフォルトの名無しさん
21/03/06 13:08:47.51 VGFn/kw3.net
あわしろ氏によると、Macは既にオワコンなので、WSLを使うと良いらしい。

445:デフォルトの名無しさん
21/03/25 15:15:49.52 LuSagST9.net
針に糸を通す( thread a needle
糸をつむぐ( spin thread [yarn]
糸が切れた( The thread broke.
琴の糸を締める( tighten a string of a koto
糸をかき鳴らす( strum the strings

446:デフォルトの名無しさん
21/04/03 09:59:34.29 CHs8071g.net
このスレ来年で10年か
スレ推奨図書とかないの?

447:デフォルトの名無しさん
22/04/14 16:49:21.50 wwxSZsaE.net
マルチスレッド処理の花形といえばハードなリアルタイムスレッドとバックグラウンドスレッドの間のデータのやり取りだと思ってるんだが
スレの過疎っぷりを見るに、殆どの人にとって必要のないものだったんだな

448:デフォルトの名無しさん
22/05/26 01:42:01.15 EhvYdlEg.net
>>447
MS-DOS のデバイスドライバにでも痕跡が残っていたような‥
どうするつもりだったんだろう?

449:デフォルトの名無しさん
22/05/26 16:41:59.49 kr4vk/7I.net
>>447
ハードな略が動いている間はバック略を動かさないから大して考えることは無い
DOSの頃と同じだな

450:デフォルトの名無しさん
23/10/18 18:12:44.04 k+tvnK8M.net
>>432
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。

451:デフォルトの名無しさん
23/10/18 18:13:06.20 k+tvnK8M.net
>>432
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。

452:デフォルトの名無しさん
23/10/18 18:16:53.34 k+tvnK8M.net
>>450-451
あ”、二重投稿になったか。

えっと、ちょっと補完。
サブスレッドの処理についてはループして待たせておく。終わったら終了を知らせるイベントを発生させる。

453:デフォルトの名無しさん
23/10/19 01:25:35.07 8UDFhheE.net
>>365
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。

454:デフォルトの名無しさん
23/10/19 01:28:22.25 8UDFhheE.net
>>16
 あれって、OSの機能だから気にしなくても良いというのでは駄目か?

455:デフォルトの名無しさん
25/05/12 13:23:26.42 Zw0HuL6G.net
1000msecでコンテキストスイッチ何回発生するんだこれ

456:デフォルトの名無しさん
25/05/12 13:41:45.50 zCv6/zTu.net
ここで multi process な質問は反則?

457:デフォルトの名無しさん
25/05/13 15:19:11.88 lpqGnCjc.net
高級言語しか使えない身で話すけど
Pythonで超重量級のCPU処理とOpenAIに対するリクエストで数秒I/Oに飛ぶ処理の二つがそれぞれタスクに分解されてるとき、
前者のタスクが処理完了すると後者のタスクで数個~数十個くらいタスクが新規作成されて、(c, c, c, i, i, i, i, i, i, c, i, i,...)
内部どうなってるのか知らんけどI/OでGIL解放されても後続のタスクが何個も後者のタスクだから前者のタスクがくそ遅延するってあり得る?
両者のタスクを別々のプロセスに切り分けたら前者のタスクが遅延するとかいうことなくなったんだけどさ

458:デフォルトの名無しさん
25/05/14 17:07:33.93 uDIzjmjF.net
そういう場合
同じ状況になる再現コードを貼りましょう

459:デフォルトの名無しさん
25/05/14 17:34:26.40 Ga6mti+e.net
5次方程式に新公式を発見:ルートを超える新理論
2025.05.14 17:05:56 WEDNESDAY
URLリンク(nazology.kusuguru.co.jp)
>>オーストラリアのニューサウスウェールズ大学(UNSW)で行われた研究
プログらまーも覚えるとよい

125年越しに解決したかもしれない「ヒルベルトの第6問題」とは?
2025年05月10日 15時00分
URLリンク(gigazine.net)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch