もなーのあれこれ

血に飢えたハムスターに飢えたあかちゃん

【アズレン完全攻略wiki】ホロライブコラボキタ━━━━(゚∀゚)━━━━!!おまいらキューブはいくつ貯めてる?【みんなの反応まとめ】

はじめに

前回の続きです。(え????????????)


ストリーム開けなかったらfalseを返す関数を実装して書き込みスレッド側がファイルにアクセスしてるかどうかを調べようとしてましたが、後で調べてみたら排他制御をおこなうためのlockステートメントというものが存在しているらしいです。

同じオブジェクトに対してロックされたブロック内の処理が競合しないとかなんかそんな感じです。

んで前回のFileRWクラスが下記みたいな感じでしたが

FileRW.cs (修正前)

class FileRW
    {
        public String targetfile { get; set; }
        public FileRW(String targetfile)
        {
            this.targetfile = targetfile;
        }
        /// <summary>
        /// テキストファイル書き込み
        /// </summary>
        /// <param name="value">テキスト文字列</param>
        public void FileWrite(String value)
        {
            try
            {
                using (var fs = new FileStream(targetfile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
                using (var sw = new StreamWriter(fs))
                {
                    Thread.Sleep(5000); //アクセス競合のためにわざと止まる。
                    sw.WriteLine(value);
                }
            }
            catch (Exception e)
            {

            }
        }
        /// <summary>
        /// テキストファイル読み込み
        /// </summary>
        /// <returns></returns>
        public String FileRead()
        {
            String result;
            try
            {
                using (var fs = new FileStream(targetfile, FileMode.Open, FileAccess.Read, FileShare.None))
                using (var sr = new StreamReader(fs))
                {
                    result = sr.ReadLine();
                }

            }
            catch (Exception e)
            {
                result = "ERROR!";
            }
            return result;
        }
    }

lockステートメントを追加しました。

FileRW.cs (修正後)

    class FileRW
    {
        public String targetfile { get; set; }
        private static Object lockobject = new Object();
        public FileRW(String targetfile)
        {
            this.targetfile = targetfile;
        }
        /// <summary>
        /// テキストファイル書き込み
        /// </summary>
        /// <param name="value">テキスト文字列</param>
        public void FileWrite(String value)
        {
            try
            {
                lock (lockobject)
                {
                    using (var fs = new FileStream(targetfile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
                    using (var sw = new StreamWriter(fs))
                    {
                        Thread.Sleep(5000); //アクセス競合のためにわざと止まる。
                        sw.WriteLine(value);
                    }
                }
            }
            catch (Exception e)
            {

            }
        }
        /// <summary>
        /// テキストファイル読み込み
        /// </summary>
        /// <returns></returns>
        public String FileRead()
        {
            String result;
            try
            {
                lock (lockobject)
                {
                    using (var fs = new FileStream(targetfile, FileMode.Open, FileAccess.Read, FileShare.None))
                    using (var sr = new StreamReader(fs))
                    {
                        result = sr.ReadLine();
                    }
                }

            }
            catch (Exception e)
            {
                result = "ERROR!";
            }
            return result;
        }
    }

動かしてみて

f:id:Monaaaaa:20191124221032p:plain

動作ヨシ

まぁ私如きが悩むことはみんな悩んでて解決法も用意されているということですね。

忘れた頃に備忘録を書く漢

本編

うおおおおおおおおおおおおおおおおおお!!!!!!!!!!!!!!!

最近ハマっているゲームがあるます。

f:id:Monaaaaa:20191124222009p:plain

こりがマリオカートちゃんですか??
毎日シコシコ走ってるせいで会社で廊下を曲がるときもイン付きを意識してしまいます。職業病ですね。

最近界隈でひとつの指標とされるようなタイムを出せたのでご報告いたします。

スーパー どろぬまアリーナ 3:00:00切り
f:id:Monaaaaa:20191124222600p:plain

こちら ロボットよこちょう 2:30:00切り
f:id:Monaaaaa:20191124222816p:plain

ひと月前くらいまではランク3桁乗るぞうおおおお!!つってひたすらトライアルしてましたがそろそろ2桁目指したくなりました。(完)

転職時に履歴書の資格欄にクラッシュ・バンディクーレーシング黒帯(クソデカフォント)と書けるように頑張りたいです。