Win32API質問箱 Build124at TECH
Win32API質問箱 Build124 - 暇つぶし2ch950:デフォルトの名無しさん
19/02/23 16:03:56.92 qOMwbnHQ.net
同期機能は同期機能としてそのまま利用しつつ、最低限の安全性や整合性については別途確認すべきなのでは。

951:デフォルトの名無しさん
19/02/23 18:44:58.70 9pAAXdf2.net
WaitForSingleObject() には、MSDN の仕様書に書かれていないような意味においての
バグ的な spurious wakeup は起きないと思う。
なお、実験する限り問題ないが、絶対ないかどうかは誰にも分からない。

952:デフォルトの名無しさん
19/02/23 18:57:16.07 Cx5sxFW5.net
c++標準ライブラリには堂々と書かれてるな
Windowsだとc++標準ライブラリを使う理由がないな

953:デフォルトの名無しさん
19/02/23 19:07:25.29 9pAAXdf2.net
同期オブジェクトは重要。
仕様書に何も書いてないのに、もし、spurious wakeup が起きるとしたらバグ。
なお、C++ の STL ライブラリは馬鹿が作ったと思ってる。
昔ながらの C の標準ライブラリは良い出来だが、それと混同しないほうがいい。

954:デフォルトの名無しさん
19/02/23 20:04:03.30 qOMwbnHQ.net
C++のSTLとCライブラリでは機能が似ているところはない気がするけど?
念のため言っとくとiostreamはSTLじゃないよ。

955:デフォルトの名無しさん
19/02/23 20:24:45.58 7js9m1kN.net
つーかspurious wakeupなんて存在を許してる時点で作ったそいつらはアホじゃないの
そいつらのリテラシーどうなっとんのか疑うレベル

956:デフォルトの名無しさん
19/02/23 20:32:05.22 qOMwbnHQ.net
汎用性のためにファイルロックを使った排他処理で実装するとそうなってしまうんじゃないの。知らんけど。

957:デフォルトの名無しさん
19/02/23 22:14:41.32 apHI25Q1.net
厳密にspurious wakeupを許さない実装は大変でパフォーマンス的にも不利だから。
というか、spurious wakeupを許すとすごく有利だというのが後から発見されたんじゃなかったかな。

958:デフォルトの名無しさん
19/02/24 02:55:03.61 ZXw7vz2Z.net
っていうか、win環境ならC++標準ライブラリよりWaitFor~を使ったほうがいいだろ
std::unique_lockなんで馬鹿みたいに遅いしw

959:デフォルトの名無しさん
19/02/24 04:17:10.21 N5G83Lpp.net
>>937
WaitForSingleObject()ってエラー返すことがあるよね?仕様上では。
要はちゃんとエラーハンドリングしろって話だけどさw

960:デフォルトの名無しさん
19/02/24 08:23:50.21 pcDSz9Pr.net
>>943
プログラムには優先順位があって、まず、正しく動作する事が一番重要。
その次に来るのが、使いやすさか、または、速度。どちらが優先されるかは
設計思想や哲学による。その次にプログラムのサイズ。
いくら速度が速くても、やるべきことが正しく行われないならプログラムとしては
失格なんだ。

961:デフォルトの名無しさん
19/02/24 08:36:16.85 fWdsplTz.net
「sprious wakeupもありえる」というのを「正しい動作」と定義したんだから何の問題もない。

962:デフォルトの名無しさん
19/02/24 08:48:33.63 pcDSz9Pr.net
それだと、使う側のプログラムが長くなるだけなので、設計思想に問題を感じる。
ライブラリ設計者の経験不足かもしれない。
速くなるといっても結局、使う側でループの中で判定して条件に合わないなら、
また繰り返し、wait するのなら、ライブラリ側でそういう風にできなかったの
だろうか。

963:デフォルトの名無しさん
19/02/24 09:42:01.89 pcDSz9Pr.net
深く考えてないけど、以下のようにしてしまえば、速度が速いまま、
spurious wakeup が絶対に起きない wait 関数を作れるんじゃないかと
思うんだけど、どうなんだろう。
Xxxx LapperWait(Yyyy y, Zzzz z) {
  for (;;) {
   raw_wait(y, z);  // spurious wakeup 有り
   if ( IsCond(y, z) ) {  // 厳密な条件チェック
     return x;
   }
  }
}

964:デフォルトの名無しさん
19/02/24 10:03:24.37 9KBfjXtA.net
>>949
深く考えてから書き込みましょう。
ぼくのかんがえたさいきょうの同期実装についてはスレ違いなので、よそでやってください。

965:デフォルトの名無しさん
19/02/24 14:42:49.21 YwY0sV++.net
LoopyWaitでいいよもう

966:デフォルトの名無しさん
19/02/24 15:26:11.06 BJ3WFlaM.net
「sprious wakeupもありえる」のはいいが、
どのAPIも使うたびにいちいち関数仕様確認するのは面倒だな
つーか関数の説明には書いてないので仕様とは言えないと思うんだが・・・初見殺し?

967:デフォルトの名無しさん
19/02/24 15:39:02.49 2tRfk65D.net
>>952
初めて使うAPIでしかも同期処理なんて複雑なものは仕様を調べて使うのが当然のことだと思うぞ。

968:デフォルトの名無しさん
19/02/24 16:04:30.12 N5G83Lpp.net
>>949
   raw_wait(y, z);  // spurious wakeup 有り

   if ( IsCond(y, z) ) {  // 厳密な条件チェック
の間で条件が変わったらどうするの?

969:デフォルトの名無しさん
19/02/24 16:07:02.11 EMRtI4X3.net
>>954
え、それはプログラミングの仕方の問題じゃないの?
元々、マルチスレッドプログラムは難しいんだけど、それと今回の
問題は別なのでは。

970:デフォルトの名無しさん
19/02/24 16:08:45.84 N5G83Lpp.net
>>955
どうやってプログラムで回避するの?
回避できないんだったら「絶対に起きない」なんて言えないだろ。
こんなレベルで排他処理語られても...

971:デフォルトの名無しさん
19/02/24 16:14:47.34 pcDSz9Pr.net
>>956
もともと、排他処理用のAPIは、そういう「変な問題が起きない」ように用意されて
いるんだよ。「Atomic」アクセス、などと言われていて、「途中に」とか
中途半端な状態が起きない作りにしてある。それは割り込み発生を好きにOFFに
できるところのシステム側(OS)でしかできない。

972:デフォルトの名無しさん
19/02/24 16:16:16.11 pcDSz9Pr.net
なぜかIDが勝手に変わったが、949=955=957だ。

973:デフォルトの名無しさん
19/02/24 16:17:26.62 9KBfjXtA.net
同期オブジェクトの正確性ではなく、ユーザ定義データの保護こそが大切。目的を見失わないように。

974:デフォルトの名無しさん
19/02/24 16:18:28.55 pcDSz9Pr.net
ちなみにオイラは、32BITマルチタスクOSを作った経験がある。

975:デフォルトの名無しさん
19/02/24 16:24:01.17 Krr3p0wT.net
>>949
シングルスレッド脳だとそういう発想になる

976:デフォルトの名無しさん
19/02/24 16:34:48.90 9KBfjXtA.net
たまにかかってくる間違い電話がいやだから電話は無能。そんな感じ。

977:デフォルトの名無しさん
19/02/24 16:36:35.10 2fcQjxFq.net
Atomicを語るならID変わらないようにしないと恥ずかしいな

978:デフォルトの名無しさん
19/02/24 16:41:49.67 pcDSz9Pr.net
IDが変わる理由は知らん。多分、5chのシステム上の問題だと思う。

979:デフォルトの名無しさん
19/02/24 16:43:05.47 pcDSz9Pr.net
沢山の人で賑わっているように見せるためかな。人寄せと広告料金関連で。

980:デフォルトの名無しさん
19/02/24 16:46:55.09 9KBfjXtA.net
コールバック形式のAPIを使うプログラマはその呼び出しタイミングをAPI側に委ねている。
何がいいたいかというと、要するにあきらめろということだ。

981:デフォルトの名無しさん
19/02/24 17:53:55.79 N5G83Lpp.net
>>957
それが起きるからどうするという話で、
あんたが糞の役のも立たないコードを出したんじゃん。
つまり>>954はクソだったと認めるということ?

982:デフォルトの名無しさん
19/02/24 18:01:12.16 pcDSz9Pr.net
>>697
多分、あのコードで問題ないはずだ。
ちなみに、オイラは現実社会では天才と言われているよ。

983:デフォルトの名無しさん
19/02/24 18:31:20.56 9KBfjXtA.net
車のバンパーは本来、ボディを保護するためにある。
そのバンパーに傷がついたりへこんだりすることを病的に嫌悪している状態。
お大事に。

984:デフォルトの名無しさん
19/02/24 18:39:12.54 fWdsplTz.net
もしそのraw_wait()がP命令だとしたらその結果がspuriousのときはV命令で状態を戻さなきゃならんと思うが。
ただどっちにしてもそのIsCond()はライブラリ側では構成しようがないけどな。
あと、やっぱりspurious wakeupって条件変数特有のものじゃなかったかな。
なんかそのへんで話がずれている気がする。

985:デフォルトの名無しさん
19/02/24 18:54:16.69 EMRtI4X3.net
>


986:;>970 どういう状況を考えてるのか前提が分からないし、だから 「深く考えてない」 という事になってしまうのだけども。少なくとも、Win32のWaitForSingleObject() では特に問題は起きない。



987:デフォルトの名無しさん
19/02/24 18:58:07.16 D1Rqo30U.net
つ MsgWaitForMultipleObjectEx

988:デフォルトの名無しさん
19/02/24 19:23:32.11 njB6xu8t.net
>>972
GetMessage相当が入ってるだけで基本WaitForと同じ動作だが何か?

989:デフォルトの名無しさん
19/02/24 22:10:09.80 SGjUOn7r.net
>>925
>WaitForSingleObjectやWaitForMultipleObjectsってspurious wakeupがあるから
>使うなと言ってる先輩がいるけど本当ですか?
嘘です。
同期オブジェクトを使いこなせない先輩が自分のバグを解決出来ずにこれを
spurious wakeupのせいにし、
同期オブジェクトをろくに知りもしない >>926-973 みたいなやつが適当なことを
書いているだけです。

990:デフォルトの名無しさん
19/02/24 23:25:34.04 N5G83Lpp.net
>>930
勇者がきてないのに目覚めてしまった魔王とか想像してほっこりした

991:デフォルトの名無しさん
19/02/25 22:30:45.76 M4I6EPLO.net
>>974
ってことは、Win環境においてはC++標準ライブラリを使う理由が無いってこと?

992:デフォルトの名無しさん
19/02/25 23:33:02.61 2LN6Bs/0.net
WaitFor~はOS制御の根幹って感じはするけど、lstrcpy~系をAPIにする意味はよく分からん

993:デフォルトの名無しさん
19/02/26 02:22:40.88 K9v1e6Ic.net
昔はCライブラリへのリンクなしでビルドする需要が割とあった。

994:デフォルトの名無しさん
19/02/26 12:16:11.37 5MxkS3P7.net
>>976
Windows では、Windows API か、それをクラスにまとめた、MFC を使う。
型も、HDC とか、Windows 独特のもの
C++標準ライブラリは、アルゴリズム以外は、あまり使わないだろ

995:デフォルトの名無しさん
19/02/26 12:23:22.51 D7AA7sgA.net
プラットフォーム共通にしたい場合なんかに使うと思うよ。
排他処理みたいな、OSに近いしい部分はOSに近しいAPIの方がいいと思うけどお。

996:デフォルトの名無しさん
19/02/26 16:48:18.20 K9v1e6Ic.net
vector,list,mapなど各種コンテナ、文字列クラスbasic_string、スマートポインタクラスshared_ptr,unique_ptrは使うでしょ。
コードでのdelete, delete[] 呼び出しを減らすためにね。

997:デフォルトの名無しさん
19/02/26 17:32:55.36 K9v1e6Ic.net
スマートポインタクラスshared_ptr,unique_ptrは、デストラクタを細かく指定できるのでHDCやHFONTなどにも使えるよ。
すでにMFCなどにラッパークラスがすでにあるから使わないだろうけど。

998:デフォルトの名無しさん
19/02/26 20:07:38.65 ZphJ05zo.net
昔はCRT依存しない実行ファイル作る意味もあったけど、C++が普通になったら
もうそこはこだわらないね。

999:デフォルトの名無しさん
19/02/26 20:15:04.12 gazg2F9T.net
>>980
プラットホーム不問にしなきゃいけないような有益なプログラムを書ける人なんてほぼいないだろ
boostライブラリみたいなものなら、プラットホーム固有のものを使っちゃいかないけど、あんなライブラリを書ける人なんて世界でも100人もいないだろ

1000:デフォルトの名無しさん
19/02/26 20:22:51.49 K9v1e6Ic.net
WindowsAPI直呼びを避ける動きは、主にゲーム業界からのニーズで発生するんだけどねぇ。

1001:デフォルトの名無しさん
19/02/26 23:03:56.44 D7AA7sgA.net
>>983
CRTに脆弱性があってから分離が当たり前になった気がするなあ
分離しておかないとパッチがあたらないし

1002:デフォルトの名無しさん
19/02/26 23:06:10.50 D7AA7sgA.net
>>984
今時のシステムはWindowsなのかLinuxなのか、上の人はコストしか見ないから
どっちでも行けるようにしておかないと下っ端は辛い状況になるよ。
外注に出す金があるならそんなみみっちいことは言われないわけで。

1003:デフォルトの名無しさん
19/02/26 23:39:30.91 K9v1e6Ic.net
>>986
ブラウン管ディスプレイのきじゃくせい(なぜか変換できない)なんてどうでもいいだろ。

1004:デフォルトの名無しさん
19/02/27 01:01:50.92 QPgoOUvU.net
strsafe.h

1005:デフォルトの名無しさん
19/02/27 03:28:19.50 32GlVML2.net
>>988
もしかして:ぜいじゃくせい

1006:デフォルトの名無しさん
19/02/27 07:27:37.75 5GOwcvUn.net
>>986
CRTに依存しないってのはstaticでもdynamicでも使わないって意味。昔はあったんだけどね。

1007:デフォルトの名無しさん
19/02/27 07:35:30.59 L5IXP2k2.net
>>990
お前すげーな、漢検でも持ってるのか?

って言われたいのかなぁw

1008:デフォルトの名無しさん
19/02/27 09:32:05.81 TPOAkFQ/.net
ネタをネタと

1009:デフォルトの名無しさん
19/02/27 09:44:25.02 TXzf+Z8H.net
申し訳ないが、心臓再同期療法の話はスレ違いなのでよそでやってくれ。

1010:デフォルトの名無しさん
19/02/27 15:18:35.62 Gg4oALq7.net
脆弱性という文字は脆弱性と読んでしまう脆弱性がある
次スレ
スレリンク(tech板)

1011:デフォルトの名無しさん
19/03/01 13:25:53.11 wtAGrKTy.net
      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴ……!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,
      //三/|三|\       ,,,,    ,,、,、,,,
      ∪  ∪
  ,,          ,    ,,,,    ,,、,、,,,       ,,、,、,,,
,,,,,    ∧_∧ うまいモナー,,,,,   、 ,,,,,,   ,,,,,,,,    ,,,,,
 ,,,   ( ´∀`)___,,,,___ ,, ∧_∧ ゲンキニ シテルカナ・・・___,,
  / ̄ ( つ日ヽ   ∧_∧    (    )               /
/    (__))   (´∀` )   (    )    ∧_∧∧_∧ / マターリモナー
 ∧_∧∧_∧ドーゾ (日ノ )  | | |    ( ´∀`) ´∀`)
 ( ´∀`) ´∀`)    ((__)  ,(_(_) (○)⊂   ) つ日⊂ ) モーナー
―(つ⊂  ) つ⊂ )――――――ヽ|〃(⌒)(⌒) (⌒)(⌒)
   (⌒)(⌒) (⌒)(⌒)グーグー

1012:デフォルトの名無しさん
19/03/03 18:40:33.11 5EsDLzeQ.net
SendMessage(WM_CLOSE);

1013:デフォルトの名無しさん
19/03/03 18:41:27.12 5EsDLzeQ.net
SendMessage(WM_SYSCOMMAND, SC_CLOSE);

1014:デフォルトの名無しさん
19/03/03 18:42:26.83 5EsDLzeQ.net
PostQuitMessage(5963);

1015:デフォルトの名無しさん
19/03/03 18:44:07.75 5EsDLzeQ.net
TerminateProcess(hProcess, 5963);

1016:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 476日 23時間 21分 7秒

1017:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


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