21/08/08 19:40:44.42 Cdmlpdjr.net
joinableだけじゃ足りん?
1000:デフォルトの名無しさん
21/08/08 19:45:39.50 8fWNQyKy.net
pthreadsにそういうAPIが無いからなぁ
1001:デフォルトの名無しさん
21/08/08 19:55:15.31 GYDyEW6S.net
pthread_timedjoin_np()使えばいいじゃない
1002:デフォルトの名無しさん
21/08/08 20:02:19.74 8fWNQyKy.net
none portableじゃないですかやーだー (でも使う)
標準としては難しそう
1003:蟻人間
21/08/08 20:27:26.52 7BKdY7dG.net
native handleをgetしてWaitForSingleObject使うとか
1004:デフォルトの名無しさん
21/08/08 20:52:17.07 GYDyEW6S.net
>>985
nandemo portable の略だから大丈夫
1005:デフォルトの名無しさん
21/08/08 21:39:14.34 yBkpHZYz.net
普通にミューテックスで排他して状態管理せよ……
だいたいスレッドが動いているかどうかという1 bitだけを外部が欲しがるという用途は(join操作そのものを除き)あんま無く、
キュー的なブツに対するデータの排他的な出し入れが普通伴うはず……
1006:デフォルトの名無しさん
21/08/08 21:44:02.93 yBkpHZYz.net
ミューテックスで数千クロックサイクル浪費するのが嫌という向きは知らん
スピンロックとかdouble-checking lockみたいな対策になるかと思うが絶対安全かつポータブルな
方法というものは無くなる希ガス
1007:デフォルトの名無しさん
21/08/08 22:18:09.18 GYDyEW6S.net
>>988
速度重視でmap/unordered_mapでコンテナ作ってみたけどやっぱり仕様変更に耐えられるvector/listコンテナ最強的なオチに似たものある
1008:デフォルトの名無しさん
21/08/08 22:43:58.32 8fWNQyKy.net
キューへの投入と取り出しがそれぞれ1スレッドだけならミューテックスを使わなくてもアトミック変数だけで排他出来る(OSに仲裁してもらわなくていい)
1009:デフォルトの名無しさん
21/08/08 23:27:24.23 yBkpHZYz.net
OSの助けなしにどうやって待ち(と起床)を実現するつもりなんじゃ……
1010:デフォルトの名無しさん
21/08/08 23:43:25.11 2XV4yDHI.net
スレッドが実行中か確認したいってどんなときなのかな?
確認したところで次の瞬間には終了してる可能性あるわけじゃん
終了を待機したいならjoinすればいいし実行中をなんのために確認したいのかよくわからん
1011:デフォルトの名無しさん
21/08/09 00:16:27.81 bkD+cive.net
Linuxのpthread_mutexの実装で使われているfutexも競合しないタイミングならユーザランドだけで処理が完結する (OSが仲裁する必要があるのは競合する場合だけ)
> Futex operation occurs entirely in user space for the
> noncontended case. The kernel is involved only to arbitrate the
> contended case. As any sane design will strive for
> noncontention, futexes are also optimized for this situation.
>
> URLリンク(man7.org)
キューが固定長, 投入スレッド1つ, 取り出しスレッド1つという条件でならアトミック変数2つ(読み出し位置, 書き込み位置)で「競合しない」ように出来るので, OSの仲裁が必要じゃなくなる
1012:デフォルトの名無しさん
21/08/09 00:22:59.44 bkD+cive.net
あと(pthread_mutexのようなネイティブの)mutexはそういう理由で大抵の場合は最速のロック機構になっているので, 自分で作るなら普通にmutex使った方がいいというのは同意
素人(俺とか)の考えたロックフリーデータ構造とか大抵設計か実装かその両方でバグが入る
1013:デフォルトの名無しさん
21/08/09 07:54:40.07 eF2Q2UUf.net
>>989
mutexが遅くてイヤならatomicじゃね?
1014:デフォルトの名無しさん
21/08/09 09:47:15.53 TRAo/ccI.net
>スレッドが実行中か確認したいってどんなときなのかな?
排他制御付きのキューを自力実装するときまれによくある……
キューがあふれそうになったときpushする側(producer)を待たせる作りにした場合、
popする側(consumer)はデータをpop後、producerが待っていたらその待ちを解除、
待っていなかったら何もしないという判断が居るのでこのためのフラグ
(producer側にpushを継続する意思があるかどうか、またはpush待ち中かどうかを表すフラグ)が居る
producerよりconsumerがいつも速い見込みでキューがあふれない前提(キューが必要に応じていくらでも大きくなる)
だったりその他(待ち解除が条件変数ではなくキューイングされるイベントだったり)だと無くてもよいから
ぜってー必要か、というとビミョーだがあった方がすっきり効率的なコードとして書ける
1015:デフォルトの名無しさん
21/08/09 09:51:30.16 TRAo/ccI.net
>>996
インターロックドインクリメントはまれによく使う
インクリメントに性交したら排他的操作権を獲得できた証、
1016:デフォルトの名無しさん
21/08/09 09:55:16.95 TRAo/ccI.net
となるようにインクリメントするカウンタの意味を仕向ける
1017:デフォルトの名無しさん
21/08/09 09:55:21.66 eF2Q2UUf.net
>>998
アンカーミスってねい?
1018:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 81日 23時間 0分 8秒
1019:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています