RtCreateMutex

RtCreateMutex creates an RTSS mutex. A handle is returned to the newly created mutex object.

Syntax

HANDLE RtCreateMutex(
    LPSECURITY_ATTRIBUTES lpMutexAttributes,
    BOOL bInitialOwner,
    LPCTSTR lpName
);

Parameters

lpMutexAttributes

Ignored.

bInitialOwner

The initial ownership state of the mutex object. If this value is TRUE and the caller created the mutex, the calling thread obtains ownership of the mutex object. Otherwise, the calling thread does not obtain ownership of the mutex.

lpName

A pointer to a null-terminated string specifying the name of the mutex object. The name is limited to 260 characters and can contain any character except the backslash path-separator character (\). Name comparison is case-sensitive.

If lpName matches the name of an existing named mutex object, this function requests MUTEX_ALL_ACCESS access to the existing object. In this case, the bInitialOwner parameter is ignored because it has already been set by the creating process.

If lpName matches the name of an existing event, semaphore, or shared memory object, the function fails and GetLastError returns ERROR_INVALID_HANDLE. This occurs because event, mutex, semaphore, and shared memory objects share the same namespace.

If lpName is NULL, the mutex object is created without a name.

Return Value

A handle to the mutex object if the function succeeds, NULL if the function fails

To get extended error information, call GetLastError.

If the named mutex object existed before the function call, GetLastError returns ERROR_ALREADY_EXISTS. Otherwise, GetLastError returns zero.

Remarks

The handle returned by RtCreateMutex has MUTEX_ALL_ACCESS access to the new mutex object and can be used in any function that requires a handle to a mutex object.

Any thread of the calling process can specify the mutex-object handle in a call to any wait function.

The state of a mutex object is signaled when it is not owned by any thread. The creating thread can use the bInitialOwner flag to request immediate ownership of the mutex. Otherwise, a thread must use the wait function to request ownership. When the mutex's state is signaled, the highest priority waiting thread is granted ownership (if more than one thread is waiting at the same priority, they receive ownership of the mutex in the order they waited); the mutex's state changes to non-signaled; and the wait function returns. Only one thread can own a mutex at any given time. The owning thread uses RtReleaseMutex to release its ownership.

The thread that owns a mutex can specify the same mutex in repeated wait function calls without blocking its execution. Typically, you would not wait repeatedly for the same mutex, but this mechanism prevents a thread from deadlocking itself while waiting for a mutex that it already owns. However, to release its ownership, the thread must call RtReleaseMutex once for each time that the mutex satisfied a wait.

Multiple processes can have handles to the same named mutex object, enabling use of the object for process synchronization. There are two object-sharing API calls that a process can use: RtOpenMutex and RtCreateMutex.

Two or more processes can call RtCreateMutex to create the same named mutex. The first process actually creates the mutex, and subsequent processes open a handle to the existing mutex. This enables multiple processes to get handles of the same mutex, while relieving the user of the responsibility of ensuring that the creating process is started first. When using this technique, set the bInitialOwner flag to FALSE; otherwise, it can be difficult to be certain which process has initial ownership.

RtCloseHandle closes a mutex-object handle. The system closes the handle automatically when the process terminates. The mutex object is destroyed when its last handle has been closed.

Requirements

Minimum Supported Version RTX64 2013
Header Rtapi.h
Library RtApi.lib (Windows), Rtx_Rtss.lib (RTSS)

See Also:

RtCloseHandle

RtOpenMutex

RtReleaseMutex