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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 21:00   #1
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию Освобождение мьютекса

Доброго дня! Разбираюсь в чужом коде, который предстоит, однако, сдать как свой и ответить на вопросы по нему(
Суть лабы: запускается несколько копий программы, они работают с разделяемой памятью, и должны заходить туда лишь по одному.

Вроде, во всём разобрался, но одно непонятно: зачем мы 2 раза вызываем функцию ReleaseMutex? Если убрать один release, то всё время заходит только одна копия, остальные бесконечно ждут.

Код:
// proc.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <strsafe.h>

using namespace std;

HANDLE hMutex;

int _tmain(int argc, _TCHAR* argv[])
{
	DWORD result;
		   hMutex=CreateMutex(NULL,true,TEXT("mymutex"));
		 
		   if (hMutex==NULL) cout<<"Error creating mutex\n";	
	for (;;)
	{
	   result=WaitForSingleObject(hMutex,500);
	   if (result==WAIT_OBJECT_0)
	   {
	     cout<<"=="<<GetCurrentThreadId()<<" is running\n";
		 Sleep(2000);
	     ReleaseMutex(hMutex);
		 ReleaseMutex(hMutex);
	   }
	   else
       cout<<"Mutex is busy. Wait for 500 ms"<<GetCurrentThreadId()<<"\n";
	}
	return 0;
}
vandrouny вне форума Ответить с цитированием
Старый 23.11.2010, 18:44   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

попробуй создать мьютекс следующим образом
hMutex=CreateMutex(NULL,false,TEXT("mymutex"));
и вызывай функцию ReleaseMutex только один раз.
rpy3uH вне форума Ответить с цитированием
Старый 29.11.2010, 23:45   #3
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию

Спасибо, помогло!
vandrouny вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти Seran4ek Общие вопросы Delphi 7 21.12.2009 18:07
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23
Освобождение памяти AlexandrSid Общие вопросы Delphi 3 02.02.2009 13:45
Освобождение Памяти в Си volotsky Помощь студентам 2 16.12.2008 22:36