【生产者&消费者】练习概念理解
1.生产者&消费者的方法来源:
解决:在同一个进程地址空间内执行的两个线程
生产者线程生产物品,然后存放在缓冲区,消费者线程从缓冲区获取物品,然后释放缓冲区
2.同步
含义:就是按预定的先后次序进行运行。即:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其他线程也不能调用这个方法。对一些不允许被多个线程同时访问的数据,就是用同步访问技术。
"同"字从字面上容易理解为一起动作。 其实不是,“同”字应是指协同、
协助、互相配合。
3.进程&线程
进程:把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。
表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。
线程:则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。
一个进程和一个线程最显著的区别是:线程有自己的全局数据。线程存在于进程中,因此一个进程的全局变量由所有的线程共享。由于线程共享同样的系统区域,操作系统分配给一个进程的资源对该进程的所有线程都是可用的,正如全局数据可供所有线程使用一样
4.互斥体
实现了“互相排斥”同步的简单形式(所以名为互斥体(mutex))。互斥体禁止多个线程同时进入受保护的代码“临界区”。因此,在任意时刻,只有一个线程被允许进入这样的代码保护区。 任何线程在进入临界区之前,必须获取与此区域相关联的互斥体的所有权。如果已有另一线程拥有了临界区的互斥体,其他线程就不能再进入其中。这些线程必须等待,直到当前的属主线程释放该互斥体。
什么时候需要使用互斥体呢?互斥体用于保护共享的易变代码,也就是,全局或静态数据。这样的数据必须通过互斥体进行保护,以防止它们在多个线程同时访问时损坏。
返回值:如执行成功,就返回互斥体对象的句柄;零表示出错
declare:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 ,一个SECURITY_ATTRIBUTES结构,这个结构决定互斥体句柄是否被子进程继承
BOOL bInitialOwner, // 初始化互斥对象的所有者,决定互斥体的创建者是否为拥有者
LPCTSTR lpName // 指向互斥对象名的指针
);