0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 2

Блокировка в потоке

08.03.2017, 18:53. Показов 776. Ответов 1

Студворк — интернет-сервис помощи студентам
Имеется некий класс с кодом. Создаю несколько потоков. После запуска программы в коде сериализации строке создания файла появляется исключение:

"Необработанное исключение типа "System.IO.IOException" произошло в mscorlib.dll

Дополнительные сведения: Процесс не может получить доступ к файлу "xxx\File.dat", так как этот файл используется другим процессом."

Что не так? Программа должна быть написана с использованием блокировки кода сохранения объекта, без обработчиков исключений.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Program
{
static void Main(string[] args)
{
MyClass myClass1 = new MyClass();
MyClass myClass2 = new MyClass();
}
}
 
[Serialization]
class MyClass
{
[NonSerialized]
Thread thrd;
}
public MyClass()
{
thrd = new Thread(this.Go);
thrd.Start();
}
public void Go()
{
int x;
object _lock = new object();
while(x < 100)
{
// какой-то код
x++;
lock(_lock)
{
saveObject();
}
}
}
}
 
public void saveObject()
        {
            using (Stream output = File.Create("File.dat"))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(output, this);
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2017, 18:53
Ответы с готовыми решениями:

Блокировка клавиши при нажатии в одной форме и блокировка в другой, третьей
Здравствуйте нужно что бы при вызове помощи в 1ом вопросе она блокировалась во 2ом вопросе,подскажите как сделать. Вам нужно...

Как получить значение переменной созданной в потоке, в другом потоке?
Добрый день :) Возник такой вопрос &quot;как получить значение переменной созданной в потоке, в другом потоке?&quot; Не знаю, как правильно...

Управление потоками. Изменение значения label (созданного в потоке 1) в потоке 2
Код таков: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; ...

1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18310 / 14234 / 5368
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
08.03.2017, 19:17
tembl4, исключение происходит потому что два потока одновременно пытаются работать с одним файлом. Блокировка (lock) не помогает потому что _lock это локальная переменная и у разных потоков она будет разной. Поэтому оба потока получают свою блокировку. Исправить ошибку можно сделав _lock static полем класса MyClass.

Также если нужно чтобы MyClass был сериализован два раза, то нужно заменить вызов File.Create("File.dat") на new FileStream("File.dat", FileMode.Append, FileAccess.Write, FileShare.None)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2017, 19:17
Помогаю со студенческими работами здесь

Работа с Dictionary в одном потоке, при этом он может изменятся в другом потоке
Здравствуйте! Я делаю лабу сервер распределенных вычислений в сети. В одном потоке ожидаю клиентов и на каждого клиента создаю поток. ...

Создать приложение, в отдельном потоке вычисляющее значение w и непрерывно обновляющее его в потоке
Ребят, с потоками не работал не когда. Есть задание , я понимаю что хотят, а вот как сделать потоками хз . Создайте приложение, в...

GDI+. Почему в отдельном потоке картинки сохраняются как белые прямоугольники, а в основном потоке - всё Ок?
Всем привет, делаю функцию уменьшения картинок при помощи библиотеки GDI+, в отдельном потоке происходит уменьшение картинки и её...

Не могу создать поток( Нужно чтобы функция запускается в потоке и работала там пока не закроем в потоке)
хм.. не могу создать поток в c++ и направить туда. Нужно чтобы функция запускается в потоке и работала там пока не закроем в потоке.

Элементы управления, созданные в одном потоке, не могут быть родительскими для элемента управления в другом потоке
Привет :) Есть задача - нужно динамически добавлять компоненты. Все работает хорошо. Но если добавлять через цикл то начинает зависать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru