C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 排他処理


(過去ログ 37 を表示中)

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■18767 / inTopicNo.1)  排他処理
  
□投稿者/ tanaka (68回)-(2008/05/16(Fri) 09:30:09)

分類:[C#] 

排他処理でlockを使用していますが、本かサイトか忘れましたがあまり
好ましくないとありましたが実際のところはどうなのでしょうか。

現在ログ処理する静的メソッドで使用してます。
Object lockThis = new Object();
lock (lockThis)
{
    try
    {
        Write(Data);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
static void Write(string Data)
{
    // 処理
}

引用返信 編集キー/
■18768 / inTopicNo.2)  Re[1]: 排他処理
□投稿者/ επιστημη (1007回)-(2008/05/16(Fri) 09:45:05)
επιστημη さんの Web サイト
> あまり好ましくないとありましたが

何故に? それがわからんことにはどう反応していいやら。

引用返信 編集キー/
■18774 / inTopicNo.3)  Re[1]: 排他処理
□投稿者/ 無門 (2回)-(2008/05/16(Fri) 10:36:43)
2008/05/17(Sat) 19:58:29 編集(投稿者)
2008/05/17(Sat) 19:44:34 編集(投稿者)

<pre><pre>■No18767 (tanaka さん) に返信
> 排他処理でlockを使用していますが、本かサイトか忘れましたがあまり
> 好ましくないとありましたが実際のところはどうなのでしょうか。
> 
> 現在ログ処理する静的メソッドで使用してます。
> Object lockThis = new Object();
> lock (lockThis)
> {
>     try
>     {
>         Write(Data);
>     }
>     catch (Exception ex)
>     {
>         MessageBox.Show(ex.Message);
>     }
> }
> static void Write(string Data)
> {
>     // 処理
> }


ここの掲示板はとてもいい人たちが集う掲示場ですよ(^_^)v。
</pre></pre>

引用返信 編集キー/
■18775 / inTopicNo.4)  Re[2]: 排他処理
□投稿者/ チャーチ (1回)-(2008/05/16(Fri) 10:44:42)
> ここの掲示板は「おしえて君」は嫌われるので、他の掲示板をあたったほうが
> よろしいかと。
>
それは余計なお世話かも?
引用返信 編集キー/
■18776 / inTopicNo.5)  Re[3]: 排他処理
□投稿者/ 無門 (3回)-(2008/05/16(Fri) 10:47:58)
2008/05/17(Sat) 19:52:37 編集(投稿者)
2008/05/17(Sat) 19:50:45 編集(投稿者)
2008/05/17(Sat) 19:45:19 編集(投稿者)

<pre><pre>■No18775 (チャーチ さん) に返信
>>ここの掲示板は「おしえて君」は嫌われるので、他の掲示板をあたったほうが
>>よろしいかと。
>>
> それは余計なお世話かも?

ミカエルさんがあらぬ誤解をうけておられることに胸が痛みます。
ミカエルさん、ごめんなさい。m(_ _)mm(_ _)mm(_ _)mm(_ _)m

今後の投稿自重します。
私は、カスの無門です。営業妨害深くあやまります。
みなさんごめんなさいね。つい調子にのってしまいました。

管理人様、すみません。m(_ _)m



引用返信 編集キー/
■18777 / inTopicNo.6)  Re[1]: 排他処理
□投稿者/ はつね (699回)-(2008/05/16(Fri) 10:49:02)
はつね さんの Web サイト
No18767 (tanaka さん) に返信
> 排他処理でlockを使用していますが、本かサイトか忘れましたがあまり
> 好ましくないとありましたが実際のところはどうなのでしょうか。

ざっとですが、Live SearchとかGoogleで検索してみたところ、そのような情報にたどり着けませんでした。
# Lock使うとパフォーマンスが落ちるという話もありますが、好ましくないというのは
# そういった類のことですか?
http://www.atmarkit.co.jp/fdotnet/mthread/mthread03/mthread03_02.html

あまり不確かな情報に惑わされないようにするというのも(Lock周りで挙動不審な事があったら、もしか
したら?と思い出すくらいで)重要かも知れません。

引用返信 編集キー/
■18785 / inTopicNo.7)  Re[4]: 排他処理
□投稿者/ なちゃ (124回)-(2008/05/16(Fri) 11:35:11)
何か理由が書かれてませんでしたか?
使い方、状況によっては望ましくないもしくはそれだけでは不十分なこともありえます。

どっちかというと正しく使えてない事も多いですが。

引用返信 編集キー/
■18788 / inTopicNo.8)  Re[5]: 排他処理
□投稿者/ 黒龍 (95回)-(2008/05/16(Fri) 11:43:49)
lock(this)だと不味いよって話ですかね。
それなら提示されたlock(lockthis)ならlockthisがスタティックでもなくprivateなオブジェクトであればいいんじゃないでしょうか?
引用返信 編集キー/
■18789 / inTopicNo.9)  Re[5]: 排他処理
□投稿者/ tanaka (69回)-(2008/05/16(Fri) 11:49:17)
No18785 (なちゃ さん) に返信
> 何か理由が書かれてませんでしたか?
> 使い方、状況によっては望ましくないもしくはそれだけでは不十分なこともありえます。
>
> どっちかというと正しく使えてない事も多いですが。
>

いろいろ検証してみました。

【デットロック対策としてtry・catchを使用した場合】
メソッドコール時に取得出来ないとログ処理を行わないためログ抜けが発生

【通常の場合】
デットロックになった時それ以降ログ処理を行わない
検証ではまだ発生はしていない。
引用返信 編集キー/
■18790 / inTopicNo.10)  Re[2]: 排他処理
□投稿者/ 渋木宏明(ひどり) (755回)-(2008/05/16(Fri) 11:52:43)
渋木宏明(ひどり) さんの Web サイト
これ(lock)も、Thread.Abort() 等の非同期例外と相性が良くないです。

http://d.hatena.ne.jp/NyaRuRu/20060605#p2

引用返信 編集キー/
■18792 / inTopicNo.11)  Re[6]: 排他処理
□投稿者/ επιστημη (1010回)-(2008/05/16(Fri) 11:54:52)
επιστημη さんの Web サイト
× デットロック
○ デッドロック (dead-lock)

引用返信 編集キー/
■18793 / inTopicNo.12)  Re[6]: 排他処理
□投稿者/ Jitta on the way (90回)-(2008/05/16(Fri) 11:56:09)
No18789 (tanaka さん) に返信

> いろいろ検証してみました。
>
> 【デットロック対策としてtry・catchを使用した場合】
> メソッドコール時に取得出来ないとログ処理を行わないためログ抜けが発生
>
> 【通常の場合】
> デットロックになった時それ以降ログ処理を行わない
> 検証ではまだ発生はしていない。


え?ごめんなさい、わかりません。


Write メソッドの中で lock するほうがいいでしょう。
たぶん、lock の直前で new object していると思います。それは、意味がありません。1つのオブジェクトを使い回すから、ロックできます。
引用返信 編集キー/
■18798 / inTopicNo.13)  Re[3]: 排他処理
□投稿者/ 出水 (59回)-(2008/05/16(Fri) 12:39:49)
lock(this)が悪い理由がわからないんですけど…

class Foo{
void test(){lock(this){...}}
}

main(){
Foo f = new Foo();
lock(f){ ... }
}

こんな感じで、外部がキーを勝手に使えてしまうからであってます?
引用返信 編集キー/
■18803 / inTopicNo.14)  Re[4]: 排他処理
□投稿者/ RX-8 (1回)-(2008/05/16(Fri) 13:35:49)
>好ましくないとありましたが実際のところはどうなのでしょうか。

対象のオブジェクトを処理する全ての箇所でlockする必要があるとか。
lock(排他処理)はデッドロックが起きる危険性があるとか。
lockの中でlockを行うとその危険性が上がるとか。
パフォーマンスが下がるとか。
適所でlockの種類を変えた方がいいとか。

とにかくlockはモデルをきちんと設計してよく考えて使わなければいけないと。
そういうったことから、lock使わないで済むならその方がいいし、使わなくて済む設計にすべきだよねといった見解ではないですかね?
引用返信 編集キー/
■18812 / inTopicNo.15)  Re[1]: 排他処理
□投稿者/ 倉田 有大 (232回)-(2008/05/16(Fri) 14:40:06)
No18767 (tanaka さん) に返信
> 排他処理でlockを使用していますが、本かサイトか忘れましたがあまり
> 好ましくないとありましたが実際のところはどうなのでしょうか。

RX-8さんがすでにかかれてますがコストとデッドロックの問題でしょう。
正しく使ってやれば問題ないかと。
引用返信 編集キー/
■18839 / inTopicNo.16)  Re[4]: 排他処理
□投稿者/ 黒龍 (97回)-(2008/05/16(Fri) 17:01:40)
No18798 (出水 さん) に返信
> lock(this)が悪い理由がわからないんですけど…
>
> class Foo{
> void test(){lock(this){...}}
> }
>
> main(){
> Foo f = new Foo();
> lock(f){ ... }
> }
>
> こんな感じで、外部がキーを勝手に使えてしまうからであってます?
です。他者から手の届く(触れる)ものをlockに使うなって事ですね。
引用返信 編集キー/
■18865 / inTopicNo.17)  Re[7]: 排他処理
□投稿者/ tanaka (70回)-(2008/05/16(Fri) 21:06:00)
No18793 (Jitta on the way さん) に返信
> ■No18789 (tanaka さん) に返信
>
>>いろいろ検証してみました。
>>
>>【デットロック対策としてtry・catchを使用した場合】
>>メソッドコール時に取得出来ないとログ処理を行わないためログ抜けが発生
>>
>>【通常の場合】
>>デットロックになった時それ以降ログ処理を行わない
>>検証ではまだ発生はしていない。
>
>
> え?ごめんなさい、わかりません。
>
>
> Write メソッドの中で lock するほうがいいでしょう。
> たぶん、lock の直前で new object していると思います。それは、意味がありません。1つのオブジェクトを使い回すから、ロックできます。

ご指摘の部分を修正致しました。検証していますが今の所不具合はありません。
皆様たくさんのご意見ありがとうございました。
解決済み
引用返信 編集キー/
■18899 / inTopicNo.18)  Re[8]: 排他処理
□投稿者/ Jitta (478回)-(2008/05/17(Sat) 14:11:52)
ご参考:
http://msdn.microsoft.com/ja-jp/library/c5kehkcz.aspx
http://msdn.microsoft.com/ja-jp/library/ms173179.aspx

解決済み
引用返信 編集キー/
■18902 / inTopicNo.19)  Re[2]: 排他処理
□投稿者/ (匿名) (2回)-(2008/05/17(Sat) 17:11:20)
No18774 (無門 さん) に返信
> ここの掲示板は「おしえて君」は嫌われるので、他の掲示板をあたったほうが
> よろしいかと。


ジサクジエンの無門=ミカエルさん。
私怨で掲示板運営の妨害をするのはやめましょう。

こっちでえらそーなこと言っていますが、あなたこそがカスであり論理破綻していることに気づきましょう。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=18570
引用返信 編集キー/
■18910 / inTopicNo.20)  Re[3]: 排他処理
 
□投稿者/ 無門(懺悔) (2回)-(2008/05/17(Sat) 20:48:50)
No18902 ((匿名) さん) に返信
> ■No18774 (無門 さん) に返信
>>ここの掲示板は「おしえて君」は嫌われるので、他の掲示板をあたったほうが
>>よろしいかと。
> 
> 
> ジサクジエンの無門=ミカエルさん。
> 私怨で掲示板運営の妨害をするのはやめましょう。
> 
> こっちでえらそーなこと言っていますが、あなたこそがカスであり論理破綻していることに気づきましょう。


ミカエルさんがあらぬ誤解をうけておられることに胸が痛みます。
ミカエルさん、ごめんなさい。m(_ _)mm(_ _)mm(_ _)mm(_ _)m

今後の投稿自重します。
私は、カスの無門です。営業妨害深くあやまります。
みなさんごめんなさいね。つい調子にのってしまいました。

管理人様、すみません。m(_ _)m



引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -