Menggunakan Objek Bernama
Contoh berikut mengilustrasikan penggunaan nama objek dengan cara membuat dan membuka mutex yang diberi nama.
Proses Pertama
Proses pertama menggunakan fungsiCreateMutex untuk membuat objek mutex. Perhatikan bahwa fungsi ini berhasil meskipun ada objek yang ada dengan nama yang sama.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
// This process creates the mutex object.
int main(void)
{
HANDLE hMutex;
hMutex = CreateMutex(
NULL, // default security descriptor
FALSE, // mutex not owned
TEXT("NameOfMutexObject")); // object name
if (hMutex == NULL)
printf("CreateMutex error: %d\n", GetLastError() );
else
if ( GetLastError() == ERROR_ALREADY_EXISTS )
printf("CreateMutex opened an existing mutex\n");
else printf("CreateMutex created a new mutex.\n");
// Keep this process around until the second process is run
_getch();
CloseHandle(hMutex);
return 0;
}
Proses Kedua
Proses kedua menggunakan fungsi OpenMutex untuk membuka handle untuk mutex yang ada. Fungsi ini gagal jika objek mutex dengan nama yang ditentukan tidak ada. Parameter akses meminta akses penuh ke objek mutex, yang diperlukan agar handle digunakan dalam salah satu fungsi tunggu.
#include <windows.h>
#include <stdio.h>
// This process opens a handle to a mutex created by another process.
int main(void)
{
HANDLE hMutex;
hMutex = OpenMutex(
MUTEX_ALL_ACCESS, // request full access
FALSE, // handle not inheritable
TEXT("NameOfMutexObject")); // object name
if (hMutex == NULL)
printf("OpenMutex error: %d\n", GetLastError() );
else printf("OpenMutex successfully opened the mutex.\n");
CloseHandle(hMutex);
return 0;
}
Topik terkait