C线程同步/异步
#include<windows.h>
#include<stdio.h>
#include<string.h>
//#include <afxmt.h>
#define T_MAX 100
int ticket;
CRITICAL_SECTION CriticalSection;
/* //售票线程
DWORD WINAPI SaleThread(LPVOID lp)
{
int n = (int) lp;
while (ticket > 0)
{
printf("SaleThread%d sell %dth ticket\n", n, T_MAX-ticket+1);
ticket--;
Sleep(500);
}
return 0;
} void MyThread()
{
HANDLE handle1,handle2,handle3,handle4,handle5;
//5个售票线程
handle1 = CreateThread(NULL,NULL,SaleThread,(void*)1,NULL,NULL);
handle2 = CreateThread(NULL,NULL,SaleThread,(void*)2,NULL,NULL);
handle3 = CreateThread(NULL,NULL,SaleThread,(void*)3,NULL,NULL);
handle4 = CreateThread(NULL,NULL,SaleThread,(void*)4,NULL,NULL);
handle5 = CreateThread(NULL,NULL,SaleThread,(void*)5,NULL,NULL);
}
*/ //售票线程
DWORD WINAPI SaleThread(LPVOID lp)
{
int n = (int) lp;
while (ticket > )
{ //临界区同步
EnterCriticalSection(&CriticalSection);
printf("SaleThread%d sell %dth ticket\n", n, T_MAX-ticket+);
ticket--;
LeaveCriticalSection(&CriticalSection);
Sleep();
}
return ;
}
void MyThread()
{
HANDLE handle1,handle2,handle3,handle4,handle5;
//5个售票线程
handle1 = CreateThread(NULL,NULL,SaleThread,(void*),NULL,NULL);
handle2 = CreateThread(NULL,NULL,SaleThread,(void*),NULL,NULL);
handle3 = CreateThread(NULL,NULL,SaleThread,(void*),NULL,NULL);
handle4 = CreateThread(NULL,NULL,SaleThread,(void*),NULL,NULL);
handle5 = CreateThread(NULL,NULL,SaleThread,(void*),NULL,NULL);
} int main(int argc, char* argv[])
{
ticket=;
//创建临界区对象
InitializeCriticalSection(&CriticalSection);
if(ticket>)
MyThread();
Sleep();
//删除临界区对象
DeleteCriticalSection(&CriticalSection);
return ;
}
C线程同步/异步的更多相关文章
- 进程&线程 同步异步&阻塞非阻塞
2015-08-19 15:23:38 周三 线程 线程安全 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对 ...
- C# 【一】进程 , 线程 , 微线程 , 同步 , 异步 , 并发 , 并行 , 阻塞 , 非阻塞
一 理解篇 前言 本文仅仅用作借鉴使用,作者刚入行不久,所以请不小心看到这篇文章的朋友,手下留情. 本文以小故事的形式进行叙述,逻辑不通之处.请理解. 如有错误 ,欢迎指出. 谢谢. ...
- JAVA 线程同步异步简单实例
package test; public class testThread { public static void main(String[] args) { Example example = n ...
- Day13_71_线程同步(synchronized)
线程同步 * 异步编程模型和同步编程模拟的区别? - 有T1和T2 两个线程 > 异步编程模型:T1线程执行T1的,T2线程执行T2的,谁也不等谁 > 同步编程模型:T1和T2 线程执行, ...
- 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading
入门-------------------------------------------------------------------------------- 概述与概念 一个C#程序开始 ...
- C#异步编程(四)混合模式线程同步
之前讨论了基元用户模式和内核模式线程同步构造.其他所有线程同步构造都基于它们,而且一般都合并了用户模式和内核模式构造,我们称为混合线程同步构造.没有线程竞争时,混合构造提供了基元用户模式构造所具有的性 ...
- C#异步编程(二)用户模式线程同步
基元线程同步构造 多个线程同时访问共享数据时,线程同步能防止数据损坏.不需要线程同步是最理想的情况,因为线程同步存在许多问题. 第一个问题就是它比较繁琐,而且很容易写错. 第二个问题是,他们会损害性能 ...
- GIL 线程池 进程池 同步 异步 阻塞 非阻塞
1.GIL 是一个全局解释器锁,是一种互斥锁 为什么需要GIL锁:因为一个python.exe进程中只有一份解释器,如果这个进程开启了多个线程都要执行代码 多线程之间要竞争解释器,一旦竞争就有可能出现 ...
- GIL 线程池 进程池 同步 异步
1.GIL(理论 重点)2.线程池 进程池3.同步 异步 GIL 是一个全局解释器锁,是一个互斥锁 为了防止竞争解释器资源而产生的 为何需要gil:因为一个python.exe进程中只有一份解释器,如 ...
随机推荐
- \r与\n有何区别,编码的时候应该如何使用
\r与\n有何区别,编码的时候应该如何使用 区别: \r: 全称:carriage return (carriage是“字车”的意思,打印机上的一个部件) 简称:return 缩写:r ASCII码: ...
- 构建一个简单的Maven项目
这里用Maven Archetype插件从空白开始创建简单的项目. 熟悉Maven 项目和Maven的核心概念. 关键词:构建生命周期(build lifecycle), Maven仓库(reposi ...
- C#:常规属性和自动实现的属性
根据属性的实现方式,属性可分为自动实现的属性和常规属性. 常规属性需要具体的人为的实现get访问器或者set访问器,而且一般需要有一个字段与之相对应:而自动实现的属性的get和set访问器的实现部分被 ...
- Spring管理Bean的三种创建方式
1.使用类构造器实例化 (90%以上都是使用这种) <bean id=“orderService" class="cn.itcast.OrderServiceBean&qu ...
- 从网页(WEB)登录SAP
以下这篇文章写得很详细,照着做就可以了: http://www.doc88.com/p-293361232332.html 设好后, 默认的端口是80$$, 其中$$是安装SAP时的instanc ...
- SQL server数据类型、增删改查
数据类型: 整数型:bigint.int.smallint.mediumint.tinyint 小数类型:decimal.numeric 浮点型:real.float.double 位型:bit 字符 ...
- linux内核的熵池
也可以看百度科 Linux内核采用熵来描述数据的随机性.熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大.在信息学中,熵被用来表征一个符号或 ...
- Swift语言学习之OC和Swift混编
本文转自http://www.helloswift.com.cn/swiftbase/2015/0112/3469.html iOS OC和Swift混编 1.创建一个swift或者oc的工程:我这里 ...
- hdu 1242 Rescue
题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...
- iOS 开发之照片框架详解(3)
http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 三. 常用方法的封装 虽然 Phot ...