windows多线程(十一) 生产者消费者问题

一、概述生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经放入产品的缓冲区中再次投

- 阅读全文 -

windows多线程(十) PV原语分析同步问题

一、PV原语介绍PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2) semaphore的取

- 阅读全文 -

windows多线程(九) 信号量Semaphore

如果你看到了这里,我就认为你已经对掌握了有关关键段 CriticalSection、互斥量Mutex和事件Event有关的内容,所以最基本的东西就不再介绍了。如果没有掌握上面说的内容,可以看这里:关键段 CriticalSection互斥量Mutex事件Event

- 阅读全文 -

windows多线程(八) 事件event

前面说的互斥量Mutex与关键段CriticalSection都不能实现线程的同步,只能实现互斥,接下来我们用时间event就可以实现线程的同步了,事件也是一个内核对象。

- 阅读全文 -

windows多线程(七) 互斥量Mutex与关键段CriticalSection比较

一、关键段CS 和 互斥量Mutex 的相同点:都有线程拥有权关键段和互斥量都有线程拥有权,即可以被一个线程拥有。在 前面讲关键段CS的文章中有说到,关键段结构体的第四个参数保存着拥有该关键段的线程的句柄,具体如下:

- 阅读全文 -

windows多线程(六) 互斥量 Mutex

一、互斥量互斥量是windows的一个内核对象,互斥量与关键段的作用相似,可以用来确保全局资源的互斥访问。并且互斥量可以用在不同的进程中的线程互斥访问全局资源。

- 阅读全文 -

windows多线程(五) 关键段 CriticalSection

一、问题回顾我们上一篇文章最后的程序的输出 g_Count 的值不是每次都正确,原因是没有对全局资源 g_Count 进行互斥访问(就是同一时刻只能由一个线程访问),接下来我们就来说一下使用关键段来给全局资源加锁以实现互斥访问。这是上一篇中的程序:

- 阅读全文 -

windows多线程(三) 等待线程返回

多线程编程中,有时我们需要等待某一线程完成了特定的操作后再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回。只要是Windows创建的Object都会被赋予一个状态量。如果Object被激活了,或者正在使用,那么该Obje

- 阅读全文 -