private WaitableObject(
                WaitableObjectType type,
                int initialSignalCount,
                int maximumSignalCount,
                OwnershipInfo ownershipInfo)
            {
                Debug.Assert(initialSignalCount >= 0);
                Debug.Assert(maximumSignalCount > 0);
                Debug.Assert(initialSignalCount <= maximumSignalCount);

                _type               = type;
                _signalCount        = initialSignalCount;
                _maximumSignalCount = maximumSignalCount;
                _ownershipInfo      = ownershipInfo;
            }
            private WaitableObject(
                WaitableObjectType type,
                int initialSignalCount,
                int maximumSignalCount,
                string?name,
                OwnershipInfo?ownershipInfo)
            {
                Debug.Assert(initialSignalCount >= 0);
                Debug.Assert(maximumSignalCount > 0);
                Debug.Assert(initialSignalCount <= maximumSignalCount);

                _type               = type;
                _signalCount        = initialSignalCount;
                _maximumSignalCount = maximumSignalCount;
                _referenceCount     = 1;
                _name               = name;
                _ownershipInfo      = ownershipInfo;
            }