Потоки и общий доступ к файлу

Рейтинг: 0Ответов: 1Опубликовано: 19.12.2014

Господа, есть немного глуповатый код (делался для учебы). Почему выскакивает исключение из-за одновременного доступа к файлу. Ведь я же заблокировал доступ к методу одновременный и к тому же по окончании метода я закрываю поток.

using System;
using System.Threading;
using System.IO;
static class a
{
    public static void WriteFiles()
    {
        lock (new object())
        {
            StreamWriter sw = new StreamWriter(new FileStream(@"D:\21.txt", FileMode.OpenOrCreate));
            StringReader sr;
            for (int x = 0; x < 10000; x++)
            {
                sr = new StringReader(x.ToString());
                sw.WriteLine(sr.ReadToEnd());
            }
            sw.Close();
        }
    }
}
class b
{
    public Thread t;
    public b()
    {
        t = new Thread(a.WriteFiles);
        t.Start();
    }
}
class c
{
    static void Main()
    {
        b B1 = new b();
        b B11 = new b();
        b B111 = new b();
        b B1111 = new b();
        B1.t.Join();
        B11.t.Join();
        B111.t.Join();
        B1111.t.Join();
    }
}

Ответы

▲ 3Принят
t = new Thread(new a().WriteFiles);

Ты для каждого треда создаешь свой экземпляр класса 'a' со своим lock-объектом. Создай в Main один экземпляр 'a' и передавай в 'b' его метод, или объяви 'a' как static