信号量
摘要:1 BOOL ReleaseSemaphore(2 HANDLE hSemaphore, // 信号量句柄3 LONG lReleaseCount, // 计数递增数量4 LPLONG lpPreviousCount // 先前计数5 ); 6 7 C++信号量Semaphore和MFC中的CSemaphore类使用【转】 信号量(Semaphore )内核对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最 大线程数目。在用CreateSemaphore () 创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。...
阅读全文
互斥对象、事件对象、关键代码段的应用和比较
摘要:互斥对象、事件对象、关键代码段的应用和比较 线程同步的方式主要有三种:互斥对象、事件对象和关键代码段。一. 互斥对象 互斥对象(mutex)属于内核对象,它能够确保线程拥有对单个资源的互斥访问权。互斥对象包含一个使用数量,一个线程ID和一个计数器。其中线程ID用于标识系统中的哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数。创建互斥对象:调用函数CreateMutex。调用成功,该函数返回所创建的互斥对象的句柄。请求互斥对象的所有权:调用函数WaitForSingleObject函数。线程必须主动请求共享对象的所有权才能获得该所有权。释放指定互斥对象的所有权:调用Releas.
阅读全文
Windows API——CreateEvent——创建事件
摘要:事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性 BOOL bManualReset, // 复位方式 BOOL bInitialState, // 初始状态 LPCTSTR lpName // 对象名称 );lpEventAttributes: [输入]一个指向SE...
阅读全文
Windows API ——CreateMutex——创建互斥对象
摘要:互斥对象是系统内核维护的一种数据结构,它保证了对象对单个线程的访问权 互斥对象的结构:包含了一个使用数量,一个线程ID,一个计数器 使用数量是指有多少个线程在调用该对象,线程ID是指互斥对象维护的线程的ID 计数器表示当前线程调用该对象的次数HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全属性结构指针BOOL bInitialOwner, //是否占有该互斥量 LPCTSTR lpName //设置互斥对象的名字 );如果一个线程拥有了一个互斥对象后,当该线程运行完成后就要释放该互斥对象,不然其...
阅读全文
临界区
摘要:每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()和Leav..
阅读全文