Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Синхронизация процессов

ЛЕКЦИЯ №11

ВОЛОКНА

ЛЕКЦИЯ №10

ПОТОКИ

HANDLE CreateThread(

LPSECURITY ATTRIBUTES ProcAttr,

SIZT_T StackSize,

LPTHREAD_START_ROUTINE Func,

LPVOID Params,

DWORD Flags,

LPWORD ThreadId)

1) Показывает NULL

2) Размер стэка зависит от того, что делает поток

3) Функция, которая будет запущена в качестве потока

4) Параметр, который попадает в функцию как данные

5) Создать, но не запускать

6) Iв потока

 

VOID ExitThread(DWORD ExitCode)

Завершение потока.

 

BOOL TerminateThread(HANDLE h,

DWORD ExitCode)

 

DWORD [Suspend/Resume] Thread(HANDLE h)

Suspend – приостановить работу потока

Resume – возобновить работу потока

Действие функции Suspend является накапливаемым (если два раза запустить функцию SuspendThread одному и тому же потоку, то необходимо вызвать дважды ResumeThread)

 

BOOL SwitchToThread()

Вызвать планировщик системы.

 

DWORD SetThreadAffinitiMask(HANDLE h,

DWORD NetMask)

Уст. множество процессоров, на которых поток может работать.

Результат – предыдущая маска, в которой все работало

 

DWORD SetThreadIdealProcessor(HANDLE h,

DWORD NProc)

Устанавливаем для потока предпочитаемый процессор. Если все равно какой процессор, то вместо NProc ставим константу MAXIMUM_PROCESSOR.

 

( потоки, которыми мы сами управляем )

LPVOID CreateFiber(

SIZE_T StackSize,

LPFIBER_START_ROUTINE Func,

LPVOID Params) – создаем волокно.

 

VOID DeleteFiber(LPVOID f) – удаление волокны

 

LPVOID ConvertThreadToFiber (LPVOID Params) – прежде чем начать работу один поток превратить в волокно.

 

BOOL ConvertFiberToThread() – уничтожаем структуру волокна и превращаем его в поток

 

VOID SwitchToFiber(LPVOID f) – переключиться на указанное волокно

 

DWORD WiteForSingleObject(HANDLE h,

DWORD Timeout)

Ждет указанное время некоторый объект.

Если мы хотим ждать «до потери пульса», то вместо указания времени пишем INFINITE. Ждать для процессов и потоков – это значит дождаться их окончания.

Результат: WAIT_TIMEOUT – не дождались (истекло время)

WAIT_OBJECT – дождались

WAIT_ABANDONED – только для MUTEX, означает, что поток завершился, но MUTEX не освободился.

 

DWORD WaitForMultipleObject(DWORD nCount,

HANDLE *h,

BOOL WaitAll,

DWORD TimeOut)

первый параметр – это количество элементов массива, далее идет указатель на первый элемент массива, следующий параметр – ждем одного из или всех вместе. И последний параметр – время ожидания.

Результат: WAIT_TIMEOUT – не дождались (если третий параметр false – значит никого не дождались, если true – не дождались сразу всех)

WAIT_OBJECT – дождались.

 

MUTEX выполняет в системе роль критической секции.

Захватить MUTEX – войти в критическую секцию.

Освободить MUTEX – выйти из критической секции.

MUTEX может принадлежать одному потоку, который будет считать, что он находится в критической секции.

 

HANDLE CreateMutex(LPSECURITY ATTRIBUTES ProcAttr,

BOOL InitOwuer,

LPCTSTR Sysname)

Создает объект

1) параметры безопасности,

2) Будем ли мы при создании mutex захватывать его или нет.

3) Системное имя mutex

 

BOOL ReleaseMutex(HANDLE h) – освободить mutex

 

Если нам объект больше не нужен, то вызываем функцию

BOOL CloseHandle(HANDLE h)

 

<== предыдущая лекция | следующая лекция ==>
Запуск. Создание процесса | Способы взаимодействия процессов
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 265; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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