C#, C♯, C#相談室 Part93©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2デフォルトの名無しさん (ワッチョイ de35-HDOw)
垢版 |
2017/04/22(土) 10:57:42.55ID:g8ZT1khs0
■過去スレ
C#, C♯, C#相談室 Part89
http://peace.2ch.net/test/read.cgi/tech/1443271409/
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/
C#, C♯, C#相談室 Part91 (実質Part92)
http://echo.2ch.net/test/read.cgi/tech/1467211515/
C#, C♯, C#相談室 Part92 (実質Part93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/

>>1
ここは、実質Part94
2017/04/22(土) 13:39:44.03ID:iVvswOrb0
■関連スレ
初心者の質問向けはこちら
ふらっと C#,C♯,C#(初心者用) Part127
http://echo.2ch.net/test/read.cgi/tech/1489498042/

>>2
補足thx。見逃していた
2017/04/22(土) 14:55:56.60ID:c4VI05+R0
おつかれ
キチガイの人(山口人生)は、複数回線もっていそうだからどこまで効果するかは分からんけれど
何もしないよりマシだね、今後もワッチョイ有りで行こう。
死ねばいいのに・・・・
2017/04/22(土) 15:23:39.94ID:FEVU7Q4Da
誰だよ山口人生ってww
2017/04/22(土) 15:39:01.94ID:S+KK7a41F
正しいスレ番と設定で立てました

C#, C♯, C#相談室 Part94
http://echo.2ch.net/test/read.cgi/tech/1492843013/
2017/04/22(土) 16:06:32.09ID:c4VI05+R0
>>5
ググッてみてば分かるw
東大出でイリノイ大学で不完全性定理で有名なゲーデルの弟子として著名な
竹内外史先生の弟子になってPh.Dを取るも、神奈川大学で万年講師、研究室の壁を蹴って騒音出していたらクビになってしまったヤツwww
経歴だけ見るとスーパーエリートwwww
学歴荒らしがあるところに山口人生あり、酷い学歴厨の60台後半じぃさん
実家はお金持ち、もう親は鬼籍かな?ビル持っていて資産が一億切っているとか、絶対ヤバそうw
P=NPを主張しているが誰にも相手にされず、学会では芸人扱いw
2017/04/22(土) 17:40:53.42ID:L9cy9Aq3a
統失くんいらっしゃい、ってかw
2017/04/22(土) 17:57:12.00ID:c4VI05+R0
敬意が足らないですね、糖質超教授と読んであげましょうwww
いらっしゃらなくていいです、迷惑なので死んでください
2017/04/22(土) 19:18:48.92ID:7MQLYtSw0
本当のその山口ってのなのか?
2017/04/22(土) 19:41:05.45ID:c4VI05+R0
張り付き方が異常、現役じゃ不可能
発言が山口人生と似ているし話が高齢者臭い、中年ですらない
Delphiを使っていて最近C#に移ってきている
ここまでのマジキチには普通日常で出会うことは無い、希少種

そんなヤツがこの日本に何人もいてたまるかwwww
2017/04/22(土) 20:05:29.05ID:7MQLYtSw0
このスレ、自分以外は全部同じ人が書き込んでたりしてw

ちょっとしたホラーだな
2017/04/22(土) 20:49:00.38ID:IUEn1/EeM
なんかワッチョイ付いてると気に入らないみたいよ
俺は付いてるほうが好きだからこっちのスレのがいいな
2017/05/03(水) 17:15:57.72ID:crwmH6BQM
こっち使おうぜ
15デフォルトの名無しさん (ワッチョイ 93f7-6g+b)
垢版 |
2017/05/05(金) 16:32:19.84ID:bVbNjYk40
今日発見した衝撃の事実
なぜWindowsUpdateの時ファイルがぶっ壊れるのかというのがずっと謎だった
Application.ThreadExit イベントで書き出しスレッドの終了処理していたのだが
手動のシャットダウンだと問題なく呼ばれるのに、リブートするとThreadExitが呼ばれない
それどころか、フォアグラウンドで作成していたスレッドが強制終了させられている上
System.Threading.ThreadAbortExceptionmもSystem.Threading.ThreadInterruptedExceptionも送出されないまま
突然中断で終了しやがってた・・・
ひでぇ終了の仕方だ・・・
なんでリブートに限りこんなシーケンスで強制終了しやがるんだ、この糞が・・・
2017/05/05(金) 16:49:33.38ID:tHPUBlll0
セキュリティ的にアプデは大事だからね
多少強引な手段で終了してもいいよね仕方ないね
2017/05/05(金) 17:01:44.90ID:3XrDrf840
シャットダウンと再起動で違うのか
2017/05/05(金) 17:10:34.10ID:pBlqXMv00
もっと詳しく知りたい。

SessionEndingイベントとかで捕まれないんか?
それ
2017/05/05(金) 17:16:16.69ID:bVbNjYk40
>>16
セキュリティは最終的には自分のファイルが壊れないことを目的にやるわけだが
そのセキュリティ対策が破壊してくれるのであれば、本末転倒なのでそんな対策は不必要って思うわけだよ。
20デフォルトの名無しさん (ワッチョイ 93f7-6g+b)
垢版 |
2017/05/05(金) 17:17:13.60ID:bVbNjYk40
>>18
SessionEndingイベントが来たときはもう殺された後だねw
ここでは対策出来ない。
2017/05/05(金) 18:09:02.57ID:pBlqXMv00
>>20
おおう、そうなんか。
2017/05/05(金) 18:13:33.93ID:A3oUashQa
>>15
Windows Updateだろうが何だろうがリブート開始時に
ユーザーに確認なくプロセスの強制終了なんてそもそもされないと思うよw

何か勘違いしてない?
2017/05/05(金) 18:24:50.53ID:A3oUashQa
ちょっと調べた感じ
http://news.mynavi.jp/column/windows/270/
にあるような感じでレジストリいじっちゃったんだろうねw
2017/05/05(金) 18:43:02.46ID:PzvORh1V0
>>22
EWX_FORCEとかEWX_FORCEIFHUNGを指定してるんでしょ
https://msdn.microsoft.com/ja-jp/library/cc429713.aspx
セキュリティアップデートは確実にリブートする必要あるから多少の犠牲はやむを得ない
って思ってるんじゃね?
2017/05/05(金) 19:11:23.54ID:FiATWWo80
客側でこれを指定されたらたまらないなー
2017/05/05(金) 19:58:14.99ID:ueXs9gXt0
ExitWindowExの英文説明では、DWORD dwReservedのとこがdwReasonになってんね。

このへんかな
2017/05/05(金) 20:10:07.89ID:05XvGSted
プロセスの終了確認はあるだろうか、その結果タイムアウトした時のスレッドの落とし方はものすごい強引だった気がする。
昔shutdown -s -t 01で落として確認した事ある。
2017/05/05(金) 20:14:25.56ID:3cKL/0El0
OSの仕様なのか.NET独特の挙動なのか>>23みたいな話なのかはっきりしないな
.NET独特の挙動だったら業務でアプリ作っている人は死活問題じゃね
2017/05/05(金) 20:27:56.88ID:PzvORh1V0
>>26
日本語版のドキュメントが更新されてないだけみたい
WindowsXPからdwReasonになってる
2017/05/05(金) 20:30:18.07ID:A3oUashQa
いやいやデフォではプロセス強制終了なんてないよ絶対w

Winduws Updateはデフォでは自動になってるんだから、Windows Updateが走るたびに
そんな無茶苦茶やってたら世界中で大騒ぎになってるってw

XPの時代はそんな経験したような記憶もあるけど
少なくともVista以降はないと思うよ
2017/05/05(金) 20:34:57.11ID:3cKL/0El0
俺は趣味でやっているだけだしアップデートも任意のタイミングでしかやらないからどうでもいいが
VSの有料ライセンス買っている人がいて心配だったら直にMSに聞いた方がいいな
2017/05/05(金) 20:48:13.06ID:05XvGSted
>>28
業務アプリが走るような環境は、社内でKB単位で配布して、ログイン前に当たるようにしてると思う。
>>30
本人はプロセスじゃなくてスレッドを問題視してるのでは?
2017/05/05(金) 22:27:29.53ID:ueXs9gXt0
>>30
言いたい事はわかるw

まーもちつけ
2017/05/06(土) 07:24:56.49ID:KTPtsEWO0
>>30
10以前はWindowsUpdateをするタイミングをこちらの問題の無いタイミングで出来たから
そもそも問題自体が存在しなかったという事実。
2017/05/06(土) 07:54:55.96ID:rojhZA3i0
適度にトラブル起こしてあげないと窓際族の情シスの仕事がなくなっちゃうからね
2017/05/06(土) 08:25:02.90ID:2V5tVO5D0
>>27
これは良いこと聞いた。
うちも似たような仕組み作ってるグループあるから、ExitWindowsExも利用して調査してみるよう伝えてみるわ
2017/05/06(土) 08:57:56.21ID:BE072L/9d
>>36
UIスレッドでメッセージボックス出しとくと、プロセスを落とす正規ルートからはずれて再現できるとか、なんか色々こねくり回したよ。
今だと仮想マシンあるから、マシンが上がってくるの待つ辛さ無いかもね。
38デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 06:03:37.70ID:OZ9w4Yf70
ロック処理についてちょっと相談です

●二つ以上のオブジェクトを同時にロックしたい
片側づつ順を追ってロックしていくのはダメ、デッドロックするので。
ロック出来ない状態である限り、ロックは限りなくしないようにしたい。
ロックに失敗までのタイムアウト処理もしたい。

●例えばこれだと、デッドロックを引き起こすので良くない
lock(obj1) lock(obj2) 処理;

●そこで、言語に以下のような構文があれば理想的なのだが
ないので、それらしいヘルパを作りたい、できれば効率的な物。
lock(obj1,obj2, ... ,timeout=1000) {
 ロック成功の場合の処理
}
timeout {
 タイムアウトした場合の処理
}
39デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 06:03:54.24ID:OZ9w4Yf70
●とりあえず簡単に考えた、しかし無駄が多そうに見える、もっと良いものが欲しい。
DateTime begin = DateTime.Now;
再試行:
bool l1 = Monitor.TryEnter(obj1, 0);
bool l2 = Monitor.TryEnter(obj2, 0);
if (l1 && l2) {
 goto ロック成功;
} else {
 if(l1) Monitor.Exit(obj1); // チェックと共にロックしてしまうので、このコードも残念賞
 if(l2) Monitor.Exit(obj2); // 同上
 if ((DateTime.Now - begin).TotalMilliseconds > 1000) {
  goto タイムアウト;
 } else {
  System.Threading.Thread.Sleep(10); // この待ち方も酷い
  goto 再試行;
 }
}
タイムアウト:
{
 タイムアウト処理
}
ロック成功:
2017/05/25(木) 07:25:50.25ID:zdaQwC0X0
ていうか普通にロック専用のオブジェクト作ってそれをロックすりゃいいんじゃねーの
41デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 07:32:55.17ID:OZ9w4Yf70
>>40
それだとロック粒度が大きくなりすぎて逆にデッドロックの可能性を拡大してしまいますね。
2017/05/25(木) 07:34:38.83ID:ZdIAUNK00
セマフォ使ったらどう?
資源数もタイムアウトもあるし
43デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 07:36:13.98ID:OZ9w4Yf70
>>42
セマフォは重いんですよねぇ
それをやるくらいなら>>39の例の方が効率的ですね。
44デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 07:50:05.84ID:OZ9w4Yf70
>http://article.higlabo.com/ja/thread_locking.html
lock(Monitor.Enter/Monitor.Exit) 同じプロセス 20ns
Mutex 違うプロセスも可能 1000ns
SemaphoreSlim 同じプロセス 200ns
Semaphore 違うプロセスも可能 1000ns
ReaderWriterLockSlim 同じプロセス 40ns
ReaderWriterLock 同じプロセス 100ns

Semaphoreは高機能すぎて、あまり軽々しくは使えない。
そのわりにはlockと違ってスレッドチェックがないので自家中毒を起こしたりするので、別途そのための対処が必要になったりする。
lock 20nsはやはり捨てがたいものです。
2017/05/25(木) 08:14:43.50ID:CNpknsWj0
見も蓋もないが、設計が間違ってる気がする。
46デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 08:20:40.14ID:OZ9w4Yf70
>>45
そんな事は無いと思うんだけどな、セマフォに標準で実装されているように
これはマルチスレッドデザインパターンとしては基本になるかと。
というか教科書にある典型ですし。
ところが、Monitorにはなかったので、おや何故ない?となっている所。
せっかく高性能なのに有効活用できないのは勿体ないと。
2017/05/25(木) 08:30:18.43ID:a8axhl9cd
>>46
そもそもなぜロックが必要なの?
48デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 08:34:06.74ID:OZ9w4Yf70
>>47
分からないならレスしないでもらえますか?
流されては叶いません。
49デフォルトの名無しさん (ワッチョイ 4bcd-yumd)
垢版 |
2017/05/25(木) 08:52:37.16ID:CNpknsWj0
>>39
みたいなことをするぐらいならSpinLockを使った自前実装で処理したほうが良いかもしれない。

もしくは
>>lock(obj1) lock(obj2) 処理;
これでもデッドロックしないように、Lockする順番を厳格にしてコーディングするとか

というか、言葉遣いに気を付けたほうが良いと思うよ。
2017/05/25(木) 08:54:51.29ID:foQMlEN20
そんなにパフォーマンスが大事ならオプティミスティックロックも検討したら?
どうせ滅多に競合なんかしないでしょ
2017/05/25(木) 09:01:40.08ID:a8axhl9cd
>>48
そもそもロックが必要という判断に至った理由が明らかでない
ロックがベストな選択肢である保証はどこにもない
52デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:04:40.54ID:OZ9w4Yf70
>>49
ここにいる知らなくてもレスしないと死ぬ病気にかかっている奴はどうしょうもない。初心者の上にキチガイなら死ねって感じですが。
とりあえず、スピンロックは使いたくないですね、あれはCPUタイムをすり潰しながら高速動作を確保しようとするものだから
それの主用途は、激重計算タスクを並列処理するための物であって、目的とちょっと違いますね。
あと、排他処理をちゃんと勉強すると、順序等を考えていても意味が無くて
ロックする瞬間に作業に必要になるリソースをすべて確保して、必ず抜けられるという事の方がデッドロックに対する対処としては有用です。
でも、上に書かれているように一つのオブジェクトで粒度を上げてしまったら本末転倒になります。
53デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:05:42.97ID:OZ9w4Yf70
>>51
ちゃんとわかっている人を待っているんだから黙ってろ
2017/05/25(木) 09:12:36.71ID:foQMlEN20
アイデアを募るならもっと広い視野で考えたほうがいいってことでしょ
矮小な問題に限定されすぎていて、マイクロベンチマークレベルの不毛な議論にしかならない
状況によっては工夫すればロックフリーな実装もできるかもしれないよ
2017/05/25(木) 09:21:45.74ID:CcaoVCJwa
うわあ。これは無視すべき奴だw
56デフォルトの名無しさん (ワッチョイ 4bcd-yumd)
垢版 |
2017/05/25(木) 09:24:19.81ID:CNpknsWj0
>>52
https://www.jpcert.or.jp/java-rules/lck07-j.html
ソースはそれっぽいものを適当に引っ張ってきた
ロックする順序は意味あると思うんだけど、、、

デッドロックが怖いってことだと思うんだけどさ
親から子へ順番守ってロックすればデッドロックしないじゃん?
57デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:24:47.08ID:OZ9w4Yf70
>>55
世の中上には上の奴がいるんだよ、俺なんかよりはるかに知識を持っている奴はいくらでも。
お前より俺の方が知識あるが、そんな俺よりもはるかに凄いやつは山のようにいるんだ。
そろそろ、中二病みたいな全能感は捨てな
58デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:32:43.15ID:OZ9w4Yf70
>>56
親子関係があれば、親についている操作ようのメソッドにロック処理をいれれば問題ないですね。
でも、今回のは完全に独立しているオブジェクト間です。
ちょっと難しいですね。
実際問題としては、順序を使う側にすべて守らせるというのは、理屈では語れても実践的ではないかもしれません。
やはり、ロック時間を短くする事が肝要であり、その為には粒度を小さくするのが基本となるかと。
汎用的なやり方としては、この方法がもっとも優れていると思います。
なので、この方法をより高パフォーマンスで実現できるヘルパーを実装して纏めて利用したい訳です。
だから、別の方法は考えていないです。Monitorを使った高速排他処理が今回の最終目標です。
2017/05/25(木) 11:13:36.68ID:5itOJ4P90
楽観的ロックのタイムアウトで、ロールバックするのが確実

人間には絶対にミス・バグがあるから、
デッドロックを100%、起こさないようにする事は、絶対に出来ないから
2017/05/25(木) 11:20:25.49ID:ts6Ek6dYM
これ触っちゃいけないやつじゃん・・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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