Хорошо скопировать CRITICAL_SECTION?

Можно использовать переменную CRITICAL_SECTION для получения взаимного исключения.

Мой вопрос: CRITICAL_SECTION поддерживает копирование? Если я передаю один значением к другому потоку, я могу знать наверняка, что взаимное исключение будет работать?

Я не был бы удивлен, ли ответ, "Вы не можете сделать этого", но было бы хорошо иметь своего рода официальное подтверждение. Я не смог найти оператор так или иначе в документации.

8
задан James McNellis 16 July 2010 в 22:29
поделиться

2 ответа

Нет. Не удается скопировать CRITICAL_SECTION . MSDN явно заявляет об этом :

Объект критического раздела не может быть перемещен или скопирован.

13
ответ дан 5 December 2019 в 12:07
поделиться

Быстрый поиск по заголовкам показывает, что структура определена в winnt.h , и это определение явно указывает на то, что копирование структуры не сработает.

typedef struct _RTL_CRITICAL_SECTION {
    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;

    //
    //  The following three fields control entering and exiting the critical
    //  section for the resource
    //

    LONG LockCount;
    LONG RecursionCount;
    HANDLE OwningThread;        // from the thread's ClientId->UniqueThread
    HANDLE LockSemaphore;
    ULONG_PTR SpinCount;        // force size on 64-bit systems when packed
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;

Тем не менее, я понятия не имею, почему эти внутренние счетчики хранятся в структуре пользовательского пространства, т.е. что произойдет, если программа их изменит?

1
ответ дан 5 December 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: