VC++深入详解——第15章:线程同步

例1:模拟火车站的售票系统

模拟两个售票窗口共同卖100张票,因为要共享这100章票的资源

这时就要涉及到线程间的同步问题。

在下文中人为的添加了干预,当线程函数1运行到if判断语句后,挂起线程1,运行线程2,然后

线程2运行到if语句后,挂起线程2,接着回来运行线程1的显示。这样可以达到对全局变量访问的同步作用。

 1 #include <Windows.h>
 2 #include<iostream>
 3 using namespace std;
 4 DWORD WINAPI func1(LPVOID lparmaters);
 5 DWORD WINAPI func2(LPVOID lparmaters);
 6
 7 int index=0;
 8 int tickets=100;
 9
10 DWORD WINAPI func1(LPVOID lparmaters)
11 {
12     /*while(index++<1000)
13         cout<<"thread1 is running"<<endl;*/
14     while (1)
15     {
16         if(tickets>0)
17         {
18             Sleep(1);
19             cout<<"thread1 sell tickets:"<<tickets--<<endl;
20         }
21         else
22             break;
23     }
24     return 0;
25 }
26
27 DWORD WINAPI func2(LPVOID lparmaters)
28 {
29     while(1)
30     {
31         if(tickets>0)
32         {
33             Sleep(1);
34             cout<<"thread2 sell tickets:"<<tickets--<<endl;
35         }
36         else
37             break;
38     }
39     return 0;
40 }
41 int main()
42 {
43
44     HANDLE hthread1;
45     HANDLE hthread2;
46     hthread1=CreateThread(NULL,0,func1,NULL,0,NULL);
47     hthread2=CreateThread(NULL,0,func2,NULL,0,NULL);
48     CloseHandle(hthread1);
49     CloseHandle(hthread2);
50     Sleep(4000);
51     system("pause");
52 }
时间: 2024-10-06 09:29:05

VC++深入详解——第15章:线程同步的相关文章

VC++深入详解——第15章:多线程,进程,线程

1. 进程: (1)程序与进程 程序是计算机指令的集合,文件形式存储在计算机磁盘上. 进程是程序执行的一个实例,是一个程序在其地址空间的一次执行活动. 一个程序可以对应着多个进程. 进程是资源申请,调度看,独立运行的单位. (2)进程的组成: 内核对象:系统用来存放进程的相关统计信息的地方,是操作系统内部分配的一个内存块. 地址空间:包含所有可执行模块或DLL模块的代码和数据,还包含动态分配的内存空间,线程的栈和堆分配的空间. (3)进程不执行任何程序,进程只是线程的容器,是线程执行程序的环境.

VC++深入详解——第16章:线程同步,关键代码段

关键代码段,也称为临界区,工作在用户方式下,它是指一小段代码,在代码能够执行前,它必须独占对某些资源的访问权. CRITICAL_SECTION型结构体. 关键代码段的相关函数: InitializeCriticalSection函数: 进入关键代码段前需要进行初始化. EnterCriticalSection函数: 获得临界区对象的所有权,如果所有权赋予了调用线程,那么就返回,否则会一直等待. LeaveCriticalSection函数: 释放指定的临界区的所有权. DeleteCritic

孙鑫视频VC++深入详解学习笔记

Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesson5: 文本编程 Lesson6: 菜单编程 Lesson7: 对话框编程 Lesson9: 定制应用程序的外观 Lesson10: 绘图控制 Lesson11 图形的保存和重绘 Lesson12 文件操作 Lesson 13: 文档串行化 Lesson14 网络编程 Lesson 15 多线程 Lesson 16 线程同步

VC++深入详解1--Win32程序

创建一个窗口,并在该窗口中响应键盘及鼠标消息,程序实现的步骤为: 1.WinMain函数的定义: 2.创建一个窗口: 3.进行消息循环: 4.编写窗口过程函数. VC++深入详解1--Win32程序,布布扣,bubuko.com

Java 多线程详解(五)------线程的声明周期

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程:http://www.cnblogs.com/ysocean/p/6883491.html Java 多线程详解(三)------线程的同步:http://www.cnblogs.com/ysocean/p/6883729.html Java 多线程详解(四)------生产者和消费者:http:/

JAVA: httpclient 详解——第五章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

《HTML 5网页开发实例详解》样章、内容简介、前言

http://spu.jd.com/1167757597.html http://product.dangdang.com/23484942.html 样章 http://download.csdn.net/download/hdzn0603/7421803 内容简介 <HTML 5网页开发实例详解>从实际的应用场景出发,结合当下的热门技术,深入浅出地介绍了 HTML 5所包含的各项新技术.本书分为 14章.第 1~4章介绍了 HTML 5和浏览器的发展史. HTML 5新特性的使用,最新的前

JAVA: httpclient 详解——第六章;

httpclient 详解--第一章: httpclient 详解--第二章: httpclient 详解--第三章: httpclient 详解--第四章: httpclient 详解--第五章: httpclient 详解--第六章: httpclient 详解--第七章: 相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.htt

JAVA: httpclient 详解——第七章;

httpclient 详解--第一章: httpclient 详解--第二章: httpclient 详解--第三章: httpclient 详解--第四章: httpclient 详解--第五章: httpclient 详解--第六章: httpclient 详解--第七章: 相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.htt