Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2009, 08:37   #1
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию deadlock

Имеется программа:
Код:
#include <windows.h>
HANDLE t1, t2;
DWORD WINAPI f(LPVOID p) {
   WaitForSingleObject(t2, INFINITE);
   return 0;
}
DWORD WINAPI g(LPVOID p) {
   WaitForSingleObject(t1, INFINITE);
   return 0;
}
int main() {
   t1 = CreateThread(0, 0, f, 0, 0, 0);
   t2 = CreateThread(0, 0, g, 0, 0, 0);
   WaitForSingleObject(t1, INFINITE);
   return 0;
}
Всегда ли она будет входить в deadlock? Ведь первый поток может завершиться(а может и не завершиться) ещё до того, как будет создан второй поток. У меня всегда зависает, поэтому спрашиваю. Собственно говоря, превоначальная цель была именно такой, и у меня уже есть и другие варианты, просто мне не понятно почему эта программа тоже входит в deadlock.
megachuhancer вне форума Ответить с цитированием
Старый 07.07.2009, 09:11   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

deadlock будет не всегда
Код:
   t1 = CreateThread(0, 0, f, 0, 0, 0);
   t2 = CreateThread(0, 0, g, 0, 0, 0);
если между двумя этими строчками кода не будет какого-либо переключения контекста, то будет deadlock. Еслти будет хотя бы одно переключение контекста, то очень высока вероятность того что во время этого переключения первый поток получит управление, а так как хендл t2 ещё не существует, то поток сразу завершится и т.д..
rpy3uH вне форума Ответить с цитированием
Старый 08.07.2009, 03:48   #3
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Спасибо за ответ.
megachuhancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц