русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Безопасность данных и критические секции кода


Дата добавления: 2015-07-09; просмотров: 498; Нарушение авторских прав


Некоторое значение, связанное с конкретным объектом, подвергается воздействию (изменению, преобразованию) со стороны потока. Это означает, что по отношению к объекту (значению объекта) применяется некоторая фиксированная последовательность операторов, в результате которой происходит КОРРЕКТНОЕ изменение состояния объекта или его значения.

В многопоточном приложении один и тот же объект может быть подвергнут одновременному “параллельному” воздействию со стороны нескольких потоков. Подобное воздействие представляет опасность для объекта и его значения, поскольку в этом случае порядок применения операторов из нескольких потоков (пусть даже и содержащих одни и те же операторы) неизбежно будет изменён.

В многопоточном программировании последовательности операторов, составляющих поток и при неконтролируемом доступе к объекту, возможно, приводящих к некорректному изменению состояния объекта, называются критическими секциями кода.

Управление последовательностью доступа потоков к объекту называют синхронизацией потоков.

Сам же объект называют объектом синхронизации.

Типичными средствами синхронизации потоков являются:

§ критические секции,

§ мониторы,

§ мьютексы.

Пример организации многопоточного приложения

Приводимый ниже пример является многопоточным приложением, пара дополнительных потоков которого получают доступ к одному и тому же объекту (объекту синхронизации). Результаты воздействия образующих потоки операторов наглядно проявляются на экране консольного приложения.

 

using System;

using System.Threading;

 

namespace threads12

{

class TextPresentation

{

Mutex mutex = new Mutex(false);

public void showText(string text)

{

int i;

// Объект синхронизации в данном конкретном случае -

// представитель класса TextPresentation. Для его обозначения используется



// первичное выражение this.______________________________________________

//1. Блокировка кода монитором (начало)// Monitor.Enter(this);

//2. Критическая секция кода (начало)// lock(this)

//2. Критическая секция кода (начало)// {

mutex.WaitOne();//3.Блокировка кода мьютексом (начало)//

Console.WriteLine(“\n” + (char)31 + (char)31 + (char)31 + (char)31);

for (i = 0; i < 250; i++)

{

Console.Write(text);

}

Console.WriteLine(“\n” + (char)30 + (char)30 + (char)30 + (char)30);

mutex.Close();//3.Блокировка кода мьютексом (конец)//

//2. Критическая секция кода (конец)// }

//1. Блокировка кода монитором (конец)

// Monitor.Exit(this);

}

}

 

class threadsRunners

{

 

public static TextPresentation tp = new TextPresentation();

public static void Runner1()

{

Console.WriteLine(“thread_1 run!”);

Console.WriteLine(“thread_1 - calling TextPresentation.showText”);

tp.showText(“*”);

Console.WriteLine(“thread_1 stop!”);

}

 

 

public static void Runner2()

{

Console.WriteLine(“thread_2 run!”);

Console.WriteLine(“thread_2 - calling TextPresentation.showText”);

tp.showText(“|”);

Console.WriteLine(“thread_2 stop!”);

}

 

static void Main(string[] args)

{

ThreadStart runner1 = new ThreadStart(Runner1);

ThreadStart runner2 = new ThreadStart(Runner2);

 

Thread th1 = new Thread(runner1);

Thread th2 = new Thread(runner2);

 

th1.Start();

th2.Start();

 

}

}

}

 



<== предыдущая лекция | следующая лекция ==>
Блокировки и тупики | Очередь как объект синхронизации


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.275 сек.