Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.386


Таненбаум Э.- Архитектура компьютера. стр.386

работы с ним. Так можно избежать состояния гонок, поскольку этому протоколу подчиняются все программные потоки. Мьютексы похожи на бинарные семафоры (то есть семафоры, которые могут принимать только два значения: 0 или 1).

Мьютексы можно создавать и разрушать вызовами pthreadmutexinit и pthreadmutexdestroy соответственно. Мьютекс может находиться в одном из двух состояний: заблокированном и незаблокированном. Если программному потоку нужно заблокировать незаблокированный мьютекс, он выполняет вызов pthread_ mutexlock, а затем продолжает работу. Однако если программный поток попытается заблокировать уже заблокированный мьютекс, поток приостанавливается. Когда поток, который в данный момент использует общий ресурс, завершит работу с этим ресурсом, он должен разблокировать соответствующий мьютекс вызовом pthreadmutexunlock.

Мьютексы предназначены для кратковременной блокировки (например, для защиты общей переменной), но не предназначены для длительной синхронизации (например, для ожидания, пока освободится накопитель на магнитной ленте). Для длительной синхронизации существуют условные переменные (condition variables). Эти переменные создаются и удаляются вызовами pthreadcondinit и pthreadconddestroy соответственно.

Условная переменная связана с двумя программными потоками: ожидающим и сигнальным. Если, например, программный поток обнаруживает, что накопитель на магнитной ленте, который ему нужен, в данный момент занят, этот поток выполняет для условной переменной вызов pthreadcondwait. Когда поток, который использует накопитель на магнитной ленте, завершает свою работу с этим устройством (а это может произойти через несколько часов), он сигнализирует об этом вызовом pthreadcondsignal. Это позволяет разблокировать ровно один поток — тот, который ожидает эту условную переменную. При отсутствии программных потоков, ожидающих эту переменную, сигнал пропадает. У условных переменных нет счетчика, как у семафоров. Отметим, что с потоками, мьютекса-ми и условными переменными можно выполнять и некоторые другие операции.

Управление процессами в Windows ХР

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

Новые процессы создаются с помощью функции CreateProcess API. Эта функция имеет 10 аргументов, у каждого из которых есть множество параметров. Очевидно, что такая система гораздо сложнее соответствующей схемы UNIX, где функция fork вообще не имеет аргументов, а у exec их всего три: указатели на имя выполняемого файла, на массив параметров командной строки и на строку описания конфигурации. Ниже перечислены 10 аргументов функции CreateProcess:

+ указатель на имя исполняемого файла;

♦ сама командная строка (без синтаксического разбора);


⇐ Предыдущая страница| |Следующая страница ⇒

.