Пример использования мьютексов (mutex) в Delphi

Вспоминая вопрос как-то заданный мне студентом про мьютексы в win32, решил поделиться собственноручно изготовленным примером на эту тему.

program mutex;

{$APPTYPE CONSOLE}

uses
SysUtils, Windows;

var
MyMutex: THandle;
LastErr: Integer;

begin
MyMutex := 0;
try
MyMutex := CreateMutex(nil, true, 'turenko-dot-com');
LastErr := GetLastError;
if LastErr = ERROR_ALREADY_EXISTS then
begin
WriteLn('Мьютекс заблокирован другой копией программы.');
WriteLn('MyMutex = ', MyMutex);
if WaitForSingleObject(MyMutex, 10000) = WAIT_TIMEOUT then
// вместо 10000мс можно поставить INFINITE чтобы ждать бесконечно
begin
WriteLn('Извините, не могу больше ждать.');
end
else
begin
WriteLn('Наконец-то дождались.');
WriteLn('Можете что-то набрать и нажать Enter');
ReadLn;
end;
end
else
begin
WriteLn('MyMutex = ', MyMutex);
WriteLn('Что-нибудь наберите и нажмите Enter');
ReadLn;
end;
finally
ReleaseMutex(MyMutex);
end;

end.

Проверялось на Delphi 7. Попробуйте запустить несколько копий программы одновременно (например, через команду "start file.exe").

PS: Что такое мьютекс (Википедия).

Мью́текс (англ. mutex (mutual exclusion)) — в программировании одноместный семафор, служащий для синхронизации параллельно выполняющихся потоков.

Единственная задача Мьютекса — защита объекта от доступа к нему других потоков (отличных от того, на который мьютекс был наложен). Если другому потоку будет нужен доступ к переменной на которую наложен мьютекс, то этот поток просто засыпает до тех пор, пока не будет снят мьютекс.

Несмотря на то, что мьютекс нацелен на защиту данных от некорректности, он порождает другие проблемы, такие как клинч и «соревнование за ресурс».

PSS: Тут на досуге добрые люди помогли мне вспомнить, кто же изначально задал мне вопрос про мьютексы - Игорь Якимчук.

· Добавьте на news2.ru

Похожие записи:


1 комментарий »

  1. Игорь Якимчук said,

    Октябрь 16, 2006 @ 18:25

    Тогда уж надо сказать и о том, кто меня попросил написать код с мьютексами, лишь вскользь упомянув о них в лекции - г-н Широких

RSS feed for comments on this post · TrackBack URI.

Прокомментируйте