多线程同步

    1.在使用多线程或者多进程时,有时候需要调节两个或者多个线程(进程)之间的活动,这一个过程称之为同步。
当多线程(进程)访问一个共享资源时,这个时候就需要同步。
任务会处于两种状态:阻塞或者正在执行。
    2.windows的同步对象
(1)经典信号量
(2)互斥体信号量
(3)事件对象
(4)可等待计数器

    3.使用互斥体同步线程
使用CreateMutex()创建一个信号量,函数原型如下:
This function creates a named or unnamed mutex object. 
HANDLE CreateMutex( 
  LPSECURITY_ATTRIBUTES lpMutexAttributes, 
  BOOL bInitialOwner, 
  LPCTSTR lpName );

参数:
lpMutexAttributes: Ignored. Must be NULL. 
bInitialOwner:如果创建的线程需要互斥体控制,则为true,否则为false;
lpName:指向一个字符串,该字符串是互斥体对象的名字。互斥体是一个全局对象,可能被其他进程使用,当
其它进程也使用了相同名称的互斥体时,二者使用相同的互斥体。这个方法可使两个进程同步。为NULL

时,限制在一个进程内。

返回值:成功 ,返回互斥体对象的句柄,否则返回NULL.

当主进程结束时,自动关闭互斥体对象的句柄,也可以调用CloseHandle()显示关闭。

DWORD WaitForSingleObject( 
  HANDLE hHandle, //互斥体对象句柄
  DWORD dwMilliseconds ); //等待时间INFINITE,无限等待
等待一个互斥体对象,只有这个互斥体对象可以使用或者超时以后才返回。

返回值:
WAIT_OBJECT_0:表示可以使用.
WAIT_TIMEOUT:超时

BOOL ReleaseMutex( 
  HANDLE hMutex );
释放一个互斥体对象,并允许其它线程使用。

示例代码:
if(WaitForSingleObject(hMutex,10000)==WAIT_TIMEOUT)
{
//handle the time_out error
}


//access the resource

ReleaseMutex(hMutex);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值