КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекция №6. Инверсия приоритетов
Инверсия приоритетов Наличие приоритетов может привести к неявной рокировке, когда более высокоприоритетный поток ждет сигнал от менее приоритетного потока.
Решение проблемы Win 2000 и Win 98: В Win 2000 планировщик учитывает время простоя готовых потоков и случайным образом повышает их динамический приоритет. В Win 98 диспетчер обнаруживает зависимости более приоритетного потока от менее приоритетного потока через объект ядра и повышает приоритет менее приоритетного потока до уровня приоритета более приоритетного потока.
Управление несколькими процессорами Распределение потоков между процессорами.
SetProcessAffinityMask() GetProcessAffinityMask() SetThreadAffinityMask() GetThreadAffinityMask() Установка аффинности может использоваться в двух случаях: · Отладка многозадачного приложения (при отладке можно наблюдать за активностью каждой отдельной нити); · Оптимизация под архитектуры с неоднородным доступом к памяти (NUMA).
Если зависимые нити поместить на один процессор, то они будут выполняться быстрее, так как будут обрабатываться через один внутренний КЭШ процессора, а не внешний, как в противном случае. MSDN: назначение (жесткое) нитей на процессора может снизить производительность.
SetIdealProcessor() GetProcessIdealProcessor()
Оптимизация в режиме пользователя Указатели на функции/методы/классы.
int (*f)(); – объявление указателя на функцию, возвращающую целое значение. При этом: *f() – сама функция, f() – указатель. На этот указатель выделяется память в статической области.
int *f(); – функция, возвращает указатель на int.
int f(int (*f1)()); – прототип функции, принимающей указатель на функцию в качестве аргумента. Также можно записать следующим образом: typedef int (*F1)(); int f(F1 f1); – прототип функции, принимающей в качестве аргумента f1 указатель на функцию (возвращающую целое значение), имеющий тип F1, описанный ранее оператором typedef.
Для вызова метода meth() объекта obj можно воспользоваться одной из следующих записей: obj meth(); obj.meth(); (*obj).meth();
class Std_interface { public: virtual void start() = 0; virtual void suspend() = 0; }
typedef void (Std_interface::* Pstd_mem)(); //Оператор:: – разрешение области // видимости класса
void f(Std_interfece *p) { Pstd_mem S = &Std_interface::suspend;//возвращает смещение до метода //suspend() в таблице виртуальных //методов Std_interface (p *S)(); p suspend(); }
Данные указатели являются смещениями указателей в таблице Виртуальных методов.
Синхронизации в пользовательском режиме Типы синхронизации:
Иллюстрация условия Гонки (race condition): long g_x = 0; DWORD WINAPI Thr1(PVOID) { g_x++; return 0; } DWORD WINAPI Thr2(PVOID) { g_x++; return 0; } LPTHREAD_START_ROUTINE thr_arr [2] = {Thr1, Thr2} HANDLE trh_hnd [2]; Int main(…) { DWORD id; g_x = 0; for (int i=0; i<2; i++) { thr_hnd [i] = CreateThread (NULL, 0, thr_arr [i], NULL, 0, &id); if (thr_hnd [i] = = NULL) ExitProcess(-1); } WaitForMultipleObjects(2, thr_hnd, TRUE, INFINITE) }
Дата добавления: 2014-12-07; Просмотров: 934; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |