DELPHI MUTEX ПРИМЕР
Синхронизация потоков в Delphi осуществляется с помощью мьютексов. Мьютексы являются примитивами синхронизации, которые позволяют ограничивать доступ потоков к разделяемым ресурсам.
Пример создания мьютекса:
var
Mutex: THandle;
begin
Mutex := CreateMutex(nil, False, 'MyMutex');
if Mutex <> 0 then
begin
try
// Критическая секция
finally
ReleaseMutex(Mutex);
end;
end;
end;
В данном примере создается мьютекс со строковым именем "MyMutex". Для входа в критическую секцию поток должен вызвать функцию WaitForSingleObject, передав ей дескриптор мьютекса в качестве параметра. После того, как поток закончит работу с разделяемыми ресурсами, он должен вызвать функцию ReleaseMutex для освобождения мьютекса.
Пример использования мьютекса для защиты доступа к файлу:
var
Mutex: THandle;
begin
Mutex := CreateMutex(nil, False, 'FileMutex');
if Mutex <> 0 then
begin
try
if WaitForSingleObject(Mutex, INFINITE) <> WAIT_OBJECT_0 then
RaiseLastOSError;
try
// Работа с файлом
finally
ReleaseMutex(Mutex);
end;
finally
CloseHandle(Mutex);
end;
end;
end;
В данном примере создается мьютекс со строковым именем "FileMutex". Для защиты доступа к файлу несколькими потоками необходимо использовать один и тот же дескриптор мьютекса во всех потоках.
C++ : mutex lock priority
Co potrafi chińskie Delphi w Mercedesie vs Star-Diagnosis
Delphi Tutorial #111 - Using TGridPanel to control proportional layouts
C++ : C++ mutex and const correctness
C++ : Spinlock vs std::mutex::try_lock
C++ : Calling std::lock () with std::vector mutex*
Delphi #175 - TVirtualImageList and TImageCollection
C++ : To Mutex or Not To Mutex?
C# : Usage of Mutex in c#
Windows : IPC connection with thread on Windows using Mutex