mysql同步互斥如何解决_线程同步互斥的4种方式

1.临界区(Critical Section):适合一个进程内的多线程访问公共区域或代码段时使用,防止多个线程同时访问一个变量或者代码段。

2.互斥量(Mutex):适合不同进程内多线程访问公共区域或者代码段时使用,可以一进程内多线程使用,也可以多个进程多线程使用。

3.事件(EVENT):通过线程间触发事件实现同步互斥,适用于后一线程需要等待前一个线程数据输出使用

4.信号量(Semaphore):与临界区和互斥量不同,可以实现多个线程同时访问公共区域数据,原理与操作系统中的PV操作类似,先设置一个访问公共区域的线程最大连接数,每一个线程访问共享区资源数就减一,直到资源数小于等于零。

下面为同步互斥使用流程

互斥:

关键段CS :

创建或初始化   InitializeCriticalSection(PCRITICAL_SECTION  lpCriticalSection)

销毁                  DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection)

进入关键区域    EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)

离开关键区域    LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection)

互斥量Mutex:

创建或初始化   CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,

BOOL bInitialOwner,

LPCTSTR lpName)

销毁                  CloseHandle (HANDLE hMutex)

进入互斥区域    WaitForSingleObject(HANDLE hMutex, INFINITE)

离开互斥区域    ReleaseMutex(HANDLE hMutex)

同步:

事件Event

创建                   CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,

BOOL bManualReset,

BOOL bInitialState,

LPCTSTR lpName)

销毁                   CloseHandle(HANDLE hEvent)

使事件触发        SetEvent(HANDLE hEvent)

使事件未触发    ResetEvent(HANDLE hEvent)

信号量Semaphore

创建                    CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,

LONG lInitialCount,

LONG lMaximumCount,

LPCTSTR lpName)

销毁                    CloseHandle(ANDLE hSemaphore)

递减计数             WaitForSingleObject(HANDLE hSemaphore, INFINITE)

递增计数             ReleaseSemaphore(HANDLE hSemaphore,

LONG lReleaseCount,

LPLONG lpPreviousCount )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值