线程同步 关键代码段 CRITICAL_SECTION 用户模式同步对象 InitializeCriticalSection

0、思考

假设线程A和线程B都可以操作C,怎样保证A、B不去同时操作C?(可以想象为A、B进入只有一个坑的卫生间C)
假设生产者线程A和消费者线程B都可以操作C,怎样保证A先处理后,B再处理,保证A、B的顺序?(可以想想A会烤面包,B会吃面包,
    怎样保证A烤好后B才去吃)

1、相关api

CRITICAL_SECTION 
InitializeCriticalSection
DeleteCriticalSection
EnterCriticalSection
LeaveCriticalSection
TryEnterCriticalSection
InitializeCriticalSectionAndSpinCount

2、写在前面

临界区:在某个时间内只允许(同一个进程内的)一个线程执行某个给定代码段。
特点:只能用于对象在同一进程里线程间的相互访问;非内核对象,在用户态进行锁操作,速度快;内部使用了interlocked函数。
缺点:无法对多个进程中的各个线程进行同步。

3、api说明

// 初始化一个临界资源对象。(单个进程的各个线程可以使用临界区对象来解决同步互斥问题)
void WINAPI InitializeCriticalSection(
  _Out_ LPCRITICAL_SECTION lpCriticalSection
);

// 释放由该对象使用的所有系统资源。
void WINAPI DeleteCriticalSection(
  _Inout_ LPCRITICAL_

你可能感兴趣的:(windows,线程同步,关键代码段,CRITICAL,SECTION,用户模式同步对象)