Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/
■関連スレ
Visual Studio 2017 Part4
http://mevius.2ch.net/test/read.cgi/tech/1509244956/
【C++】 DirectX初心者質問スレ Part40 【C】
http://mevius.2ch.net/test/read.cgi/tech/1474782237/
探検
Win32API質問箱 Build124
レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/11/11(土) 19:23:00.69ID:TpLoCFAx
926デフォルトの名無しさん
2019/02/22(金) 21:44:37.57ID:x13qkxfg spurious wakeupがある→正しい
使うな→よりより代替手段がなければ使うしかない
代替手段があるかどうかは環境によるから先輩ちゃんに聞く
使うな→よりより代替手段がなければ使うしかない
代替手段があるかどうかは環境によるから先輩ちゃんに聞く
927デフォルトの名無しさん
2019/02/22(金) 22:18:48.32ID:JuVjm6Gn https://docs.microsoft.com/en-us/windows/desktop/sync/condition-variables
条件変数のAPIではspurious wakeupsに言及がある、ただしWaitForSingleObjectなどでは言及が見つからなかった
https://stackoverflow.com/questions/38757420/is-waiting-for-an-event-subject-to-spurious-wakeups
出典不明だがWaitForSingleObjectはspurious wakeupが起こらないとある
WaitForMultipleObjectsExでは、bAlertableにTRUEを渡せばspurious wakeupが起こりうるらしい
先輩の情報源を知りたい
条件変数のAPIではspurious wakeupsに言及がある、ただしWaitForSingleObjectなどでは言及が見つからなかった
https://stackoverflow.com/questions/38757420/is-waiting-for-an-event-subject-to-spurious-wakeups
出典不明だがWaitForSingleObjectはspurious wakeupが起こらないとある
WaitForMultipleObjectsExでは、bAlertableにTRUEを渡せばspurious wakeupが起こりうるらしい
先輩の情報源を知りたい
928デフォルトの名無しさん
2019/02/22(金) 22:23:38.90ID:qRCx8JnJ 同期オブジェクトが非シグナル状態でWaitFor系関数から勝手に戻ってくることはないと断言できる
仕掛けるオブジェクトに依ると思う
仕掛けるオブジェクトに依ると思う
929デフォルトの名無しさん
2019/02/22(金) 22:27:18.85ID:qRCx8JnJ ただし単に寝ていたスレッドが起きるという現象自体は外部のCPU負荷調節アプリとかでResumeTheradを発行することで簡単に再現できる
930デフォルトの名無しさん
2019/02/22(金) 23:11:25.13ID:4O+31NpZ 魔王も勇者が入って来ただけで起きるしな
931デフォルトの名無しさん
2019/02/22(金) 23:26:13.44ID:7tzQnSDu そもそも何をWaitFor系関数で待つのかってのも大きい。自作Signalオブジェクトなら問題起きないでしょ。
932デフォルトの名無しさん
2019/02/23(土) 07:23:17.25ID:9pAAXdf2 >>927
以前、2つのプロセス間で、WaitForSingleObject() を CreateEvent(), SetEvent() 系
の HANDLE で実験してみたけど、バグ的な現象は起きず、至って正常に動作し、
2つのプロセスで、お互いに、SetEvent() したり、WaitForSingleObject() で
相手を待ったりして、ハンドシェイク的な振る舞いが思ったとおりに出来ることが
確認できた。
速度も、SetEvent() した事が相手に届くまで、確か、1(μs)前後だったので、
十分速いと結論付けた。
以前、2つのプロセス間で、WaitForSingleObject() を CreateEvent(), SetEvent() 系
の HANDLE で実験してみたけど、バグ的な現象は起きず、至って正常に動作し、
2つのプロセスで、お互いに、SetEvent() したり、WaitForSingleObject() で
相手を待ったりして、ハンドシェイク的な振る舞いが思ったとおりに出来ることが
確認できた。
速度も、SetEvent() した事が相手に届くまで、確か、1(μs)前後だったので、
十分速いと結論付けた。
933デフォルトの名無しさん
2019/02/23(土) 08:40:48.30ID:zem2FMDi C++標準のwait系にはあるからいちいち確認するしなきゃいけないから面倒だよな
しかも、イベントだけ使いたいのにいちいちmutexをよういしなきゃいけないし・・・
しかも、イベントだけ使いたいのにいちいちmutexをよういしなきゃいけないし・・・
934デフォルトの名無しさん
2019/02/23(土) 11:36:21.35ID:+DV3f+Dk 都市伝説かも知れんが
そもそもいつ発生するか判らない発生しないかも判らない現象を
ちょっとテスト書いてみて大丈夫(キリつ
そもそもいつ発生するか判らない発生しないかも判らない現象を
ちょっとテスト書いてみて大丈夫(キリつ
935デフォルトの名無しさん
2019/02/23(土) 11:54:16.12ID:apHI25Q1 条件変数ならともかく、Eventなんかはspuriousで起こされても確かめようがないんじゃないのかな。
936デフォルトの名無しさん
2019/02/23(土) 16:03:56.92ID:qOMwbnHQ 同期機能は同期機能としてそのまま利用しつつ、最低限の安全性や整合性については別途確認すべきなのでは。
937デフォルトの名無しさん
2019/02/23(土) 18:44:58.70ID:9pAAXdf2 WaitForSingleObject() には、MSDN の仕様書に書かれていないような意味においての
バグ的な spurious wakeup は起きないと思う。
なお、実験する限り問題ないが、絶対ないかどうかは誰にも分からない。
バグ的な spurious wakeup は起きないと思う。
なお、実験する限り問題ないが、絶対ないかどうかは誰にも分からない。
938デフォルトの名無しさん
2019/02/23(土) 18:57:16.07ID:Cx5sxFW5 c++標準ライブラリには堂々と書かれてるな
Windowsだとc++標準ライブラリを使う理由がないな
Windowsだとc++標準ライブラリを使う理由がないな
939デフォルトの名無しさん
2019/02/23(土) 19:07:25.29ID:9pAAXdf2 同期オブジェクトは重要。
仕様書に何も書いてないのに、もし、spurious wakeup が起きるとしたらバグ。
なお、C++ の STL ライブラリは馬鹿が作ったと思ってる。
昔ながらの C の標準ライブラリは良い出来だが、それと混同しないほうがいい。
仕様書に何も書いてないのに、もし、spurious wakeup が起きるとしたらバグ。
なお、C++ の STL ライブラリは馬鹿が作ったと思ってる。
昔ながらの C の標準ライブラリは良い出来だが、それと混同しないほうがいい。
940デフォルトの名無しさん
2019/02/23(土) 20:04:03.30ID:qOMwbnHQ C++のSTLとCライブラリでは機能が似ているところはない気がするけど?
念のため言っとくとiostreamはSTLじゃないよ。
念のため言っとくとiostreamはSTLじゃないよ。
941デフォルトの名無しさん
2019/02/23(土) 20:24:45.58ID:7js9m1kN つーかspurious wakeupなんて存在を許してる時点で作ったそいつらはアホじゃないの
そいつらのリテラシーどうなっとんのか疑うレベル
そいつらのリテラシーどうなっとんのか疑うレベル
942デフォルトの名無しさん
2019/02/23(土) 20:32:05.22ID:qOMwbnHQ 汎用性のためにファイルロックを使った排他処理で実装するとそうなってしまうんじゃないの。知らんけど。
943デフォルトの名無しさん
2019/02/23(土) 22:14:41.32ID:apHI25Q1 厳密にspurious wakeupを許さない実装は大変でパフォーマンス的にも不利だから。
というか、spurious wakeupを許すとすごく有利だというのが後から発見されたんじゃなかったかな。
というか、spurious wakeupを許すとすごく有利だというのが後から発見されたんじゃなかったかな。
944デフォルトの名無しさん
2019/02/24(日) 02:55:03.61ID:ZXw7vz2Z っていうか、win環境ならC++標準ライブラリよりWaitFor〜を使ったほうがいいだろ
std::unique_lockなんで馬鹿みたいに遅いしw
std::unique_lockなんで馬鹿みたいに遅いしw
945デフォルトの名無しさん
2019/02/24(日) 04:17:10.21ID:N5G83Lpp946デフォルトの名無しさん
2019/02/24(日) 08:23:50.21ID:pcDSz9Pr >>943
プログラムには優先順位があって、まず、正しく動作する事が一番重要。
その次に来るのが、使いやすさか、または、速度。どちらが優先されるかは
設計思想や哲学による。その次にプログラムのサイズ。
いくら速度が速くても、やるべきことが正しく行われないならプログラムとしては
失格なんだ。
プログラムには優先順位があって、まず、正しく動作する事が一番重要。
その次に来るのが、使いやすさか、または、速度。どちらが優先されるかは
設計思想や哲学による。その次にプログラムのサイズ。
いくら速度が速くても、やるべきことが正しく行われないならプログラムとしては
失格なんだ。
947デフォルトの名無しさん
2019/02/24(日) 08:36:16.85ID:fWdsplTz 「sprious wakeupもありえる」というのを「正しい動作」と定義したんだから何の問題もない。
948デフォルトの名無しさん
2019/02/24(日) 08:48:33.63ID:pcDSz9Pr それだと、使う側のプログラムが長くなるだけなので、設計思想に問題を感じる。
ライブラリ設計者の経験不足かもしれない。
速くなるといっても結局、使う側でループの中で判定して条件に合わないなら、
また繰り返し、wait するのなら、ライブラリ側でそういう風にできなかったの
だろうか。
ライブラリ設計者の経験不足かもしれない。
速くなるといっても結局、使う側でループの中で判定して条件に合わないなら、
また繰り返し、wait するのなら、ライブラリ側でそういう風にできなかったの
だろうか。
949デフォルトの名無しさん
2019/02/24(日) 09:42:01.89ID:pcDSz9Pr 深く考えてないけど、以下のようにしてしまえば、速度が速いまま、
spurious wakeup が絶対に起きない wait 関数を作れるんじゃないかと
思うんだけど、どうなんだろう。
Xxxx LapperWait(Yyyy y, Zzzz z) {
for (;;) {
raw_wait(y, z); // spurious wakeup 有り
if ( IsCond(y, z) ) { // 厳密な条件チェック
return x;
}
}
}
spurious wakeup が絶対に起きない wait 関数を作れるんじゃないかと
思うんだけど、どうなんだろう。
Xxxx LapperWait(Yyyy y, Zzzz z) {
for (;;) {
raw_wait(y, z); // spurious wakeup 有り
if ( IsCond(y, z) ) { // 厳密な条件チェック
return x;
}
}
}
950デフォルトの名無しさん
2019/02/24(日) 10:03:24.37ID:9KBfjXtA951デフォルトの名無しさん
2019/02/24(日) 14:42:49.21ID:YwY0sV++ LoopyWaitでいいよもう
952デフォルトの名無しさん
2019/02/24(日) 15:26:11.06ID:BJ3WFlaM 「sprious wakeupもありえる」のはいいが、
どのAPIも使うたびにいちいち関数仕様確認するのは面倒だな
つーか関数の説明には書いてないので仕様とは言えないと思うんだが・・・初見殺し?
どのAPIも使うたびにいちいち関数仕様確認するのは面倒だな
つーか関数の説明には書いてないので仕様とは言えないと思うんだが・・・初見殺し?
953デフォルトの名無しさん
2019/02/24(日) 15:39:02.49ID:2tRfk65D >>952
初めて使うAPIでしかも同期処理なんて複雑なものは仕様を調べて使うのが当然のことだと思うぞ。
初めて使うAPIでしかも同期処理なんて複雑なものは仕様を調べて使うのが当然のことだと思うぞ。
954デフォルトの名無しさん
2019/02/24(日) 16:04:30.12ID:N5G83Lpp >>949
raw_wait(y, z); // spurious wakeup 有り
と
if ( IsCond(y, z) ) { // 厳密な条件チェック
の間で条件が変わったらどうするの?
raw_wait(y, z); // spurious wakeup 有り
と
if ( IsCond(y, z) ) { // 厳密な条件チェック
の間で条件が変わったらどうするの?
955デフォルトの名無しさん
2019/02/24(日) 16:07:02.11ID:EMRtI4X3956デフォルトの名無しさん
2019/02/24(日) 16:08:45.84ID:N5G83Lpp957デフォルトの名無しさん
2019/02/24(日) 16:14:47.34ID:pcDSz9Pr >>956
もともと、排他処理用のAPIは、そういう「変な問題が起きない」ように用意されて
いるんだよ。「Atomic」アクセス、などと言われていて、「途中に」とか
中途半端な状態が起きない作りにしてある。それは割り込み発生を好きにOFFに
できるところのシステム側(OS)でしかできない。
もともと、排他処理用のAPIは、そういう「変な問題が起きない」ように用意されて
いるんだよ。「Atomic」アクセス、などと言われていて、「途中に」とか
中途半端な状態が起きない作りにしてある。それは割り込み発生を好きにOFFに
できるところのシステム側(OS)でしかできない。
958デフォルトの名無しさん
2019/02/24(日) 16:16:16.11ID:pcDSz9Pr なぜかIDが勝手に変わったが、949=955=957だ。
959デフォルトの名無しさん
2019/02/24(日) 16:17:26.62ID:9KBfjXtA 同期オブジェクトの正確性ではなく、ユーザ定義データの保護こそが大切。目的を見失わないように。
960デフォルトの名無しさん
2019/02/24(日) 16:18:28.55ID:pcDSz9Pr ちなみにオイラは、32BITマルチタスクOSを作った経験がある。
961デフォルトの名無しさん
2019/02/24(日) 16:24:01.17ID:Krr3p0wT >>949
シングルスレッド脳だとそういう発想になる
シングルスレッド脳だとそういう発想になる
962デフォルトの名無しさん
2019/02/24(日) 16:34:48.90ID:9KBfjXtA たまにかかってくる間違い電話がいやだから電話は無能。そんな感じ。
963デフォルトの名無しさん
2019/02/24(日) 16:36:35.10ID:2fcQjxFq Atomicを語るならID変わらないようにしないと恥ずかしいな
964デフォルトの名無しさん
2019/02/24(日) 16:41:49.67ID:pcDSz9Pr IDが変わる理由は知らん。多分、5chのシステム上の問題だと思う。
965デフォルトの名無しさん
2019/02/24(日) 16:43:05.47ID:pcDSz9Pr 沢山の人で賑わっているように見せるためかな。人寄せと広告料金関連で。
966デフォルトの名無しさん
2019/02/24(日) 16:46:55.09ID:9KBfjXtA コールバック形式のAPIを使うプログラマはその呼び出しタイミングをAPI側に委ねている。
何がいいたいかというと、要するにあきらめろということだ。
何がいいたいかというと、要するにあきらめろということだ。
967デフォルトの名無しさん
2019/02/24(日) 17:53:55.79ID:N5G83Lpp968デフォルトの名無しさん
2019/02/24(日) 18:01:12.16ID:pcDSz9Pr969デフォルトの名無しさん
2019/02/24(日) 18:31:20.56ID:9KBfjXtA 車のバンパーは本来、ボディを保護するためにある。
そのバンパーに傷がついたりへこんだりすることを病的に嫌悪している状態。
お大事に。
そのバンパーに傷がついたりへこんだりすることを病的に嫌悪している状態。
お大事に。
970デフォルトの名無しさん
2019/02/24(日) 18:39:12.54ID:fWdsplTz もしそのraw_wait()がP命令だとしたらその結果がspuriousのときはV命令で状態を戻さなきゃならんと思うが。
ただどっちにしてもそのIsCond()はライブラリ側では構成しようがないけどな。
あと、やっぱりspurious wakeupって条件変数特有のものじゃなかったかな。
なんかそのへんで話がずれている気がする。
ただどっちにしてもそのIsCond()はライブラリ側では構成しようがないけどな。
あと、やっぱりspurious wakeupって条件変数特有のものじゃなかったかな。
なんかそのへんで話がずれている気がする。
971デフォルトの名無しさん
2019/02/24(日) 18:54:16.69ID:EMRtI4X3 >>970
どういう状況を考えてるのか前提が分からないし、だから
「深く考えてない」
という事になってしまうのだけども。少なくとも、Win32のWaitForSingleObject()
では特に問題は起きない。
どういう状況を考えてるのか前提が分からないし、だから
「深く考えてない」
という事になってしまうのだけども。少なくとも、Win32のWaitForSingleObject()
では特に問題は起きない。
972デフォルトの名無しさん
2019/02/24(日) 18:58:07.16ID:D1Rqo30U つ MsgWaitForMultipleObjectEx
973デフォルトの名無しさん
2019/02/24(日) 19:23:32.11ID:njB6xu8t >>972
GetMessage相当が入ってるだけで基本WaitForと同じ動作だが何か?
GetMessage相当が入ってるだけで基本WaitForと同じ動作だが何か?
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 高市内閣「支持」64%「不支持」19% NHK世論調査 ★2 [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 高市首相「多様なコメの増産を進める」 方針転換への懸念払拭狙いか ★2 [どどん★]
- 【速報】気象庁がマグニチュード7.5に修正しました [ニョキニョキ★]
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 巨大地震 [957955821]
- 【🏡】岩手ビックウェーブ🏄うおおおおおおおおおおお🌊
- 【速報】高市早苗、起床 [779938112]
- 日本ほど隣国ガチャが失敗した国、ないwwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 久しぶりにヒカキンのチャンネル確認しに行ったら
