Chinaunix首页 | 论坛 | 博客
  • 博客访问: 384651
  • 博文数量: 102
  • 博客积分: 1395
  • 博客等级: 中尉
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-05 18:09
文章分类

全部博文(102)

文章存档

2013年(25)

2012年(77)

分类: C/C++

2013-04-01 10:55:39

  • 互斥对象和事件对象都属于内核对象, 利用内核对象进行线程同步时,速度较慢,但利用互斥对象和事件对象这样的内核对象,可以在多个进程的各个线程进行同步
  • 关键代码段工作在用户方式下,同步速度较快,但在使用关键代码段是容易进入死锁状态,因为在等待进入关键代码段时是无法设置超时值的通常在编写多线程并需要线程同步时,首选关键代码段
        关键代码段所用函数及数据结构:
    VOID InitializeCriticalSection(
      LPCRITICAL_SECTION  // critical section );构建一个关键代码段对象
    
    VOID EnterCriticalSection(
      LPCRITICAL_SECTION  // critical section );获取关键代码段的权限  会block
 
    BOOL TryEnterCriticalSection(
      LPCRITICAL_SECTION  // critical section );
 
    VOID LeaveCriticalSection(
      LPCRITICAL_SECTION  // critical section );使用完后要归还权限
 
    VOID DeleteCriticalSection(
      LPCRITICAL_SECTION  // critical section ); 删除该关键代码段对象
    CRITICAL_SECTION 关键代码段数据结构 
    事件对象 
 

 



    HANDLE CreateEvent(

         LPSECURITY_ATTRIBUTES , // SD  BOOL , // reset type  BOOL , // initial state  LPCTSTR              // object name );创建一个事件对象可以设置人工重置或自动重置,有信号和无信号, 返回一个事件对象句柄
    BOOL ResetEvent(  HANDLE  // handle to event);设置为无信号状态
    BOOL SetEvent(  HANDLE  // handle to event);设置为有信号状态 
    BOOL CloseHandle(  HANDLE  // handle to object); 
    互斥对象: 
    HANDLE CreateMutex(  LPSECURITY_ATTRIBUTES , // SD BOOL bInitialOwner, // initial owner LPCTSTR  // 
    object name);构建一个互斥队想的句柄 
    DWORD WaitForSingleObject(  HANDLE , // handle to object  DWORD  // time-out interval);获取gai互斥对象 
    BOOL ReleaseMutex(  HANDLE  // handle to mutex);释放该互斥对象 
    BOOL CloseHandle(  HANDLE  // handle to object); 





 

阅读(1916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~