#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线程同步/异步的更多相关文章

  1. 进程&线程 同步异步&阻塞非阻塞

    2015-08-19 15:23:38 周三 线程 线程安全 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对 ...

  2. C# 【一】进程 , 线程 , 微线程 , 同步 , 异步 , 并发 , 并行 , 阻塞 , 非阻塞

    一 理解篇 前言 本文仅仅用作借鉴使用,作者刚入行不久,所以请不小心看到这篇文章的朋友,手下留情. 本文以小故事的形式进行叙述,逻辑不通之处.请理解. 如有错误 ,欢迎指出. 谢谢.          ...

  3. JAVA 线程同步异步简单实例

    package test; public class testThread { public static void main(String[] args) { Example example = n ...

  4. Day13_71_线程同步(synchronized)

    线程同步 * 异步编程模型和同步编程模拟的区别? - 有T1和T2 两个线程 > 异步编程模型:T1线程执行T1的,T2线程执行T2的,谁也不等谁 > 同步编程模型:T1和T2 线程执行, ...

  5. 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading

    入门-------------------------------------------------------------------------------- 概述与概念    一个C#程序开始 ...

  6. C#异步编程(四)混合模式线程同步

    之前讨论了基元用户模式和内核模式线程同步构造.其他所有线程同步构造都基于它们,而且一般都合并了用户模式和内核模式构造,我们称为混合线程同步构造.没有线程竞争时,混合构造提供了基元用户模式构造所具有的性 ...

  7. C#异步编程(二)用户模式线程同步

    基元线程同步构造 多个线程同时访问共享数据时,线程同步能防止数据损坏.不需要线程同步是最理想的情况,因为线程同步存在许多问题. 第一个问题就是它比较繁琐,而且很容易写错. 第二个问题是,他们会损害性能 ...

  8. GIL 线程池 进程池 同步 异步 阻塞 非阻塞

    1.GIL 是一个全局解释器锁,是一种互斥锁 为什么需要GIL锁:因为一个python.exe进程中只有一份解释器,如果这个进程开启了多个线程都要执行代码 多线程之间要竞争解释器,一旦竞争就有可能出现 ...

  9. GIL 线程池 进程池 同步 异步

    1.GIL(理论 重点)2.线程池 进程池3.同步 异步 GIL 是一个全局解释器锁,是一个互斥锁 为了防止竞争解释器资源而产生的 为何需要gil:因为一个python.exe进程中只有一份解释器,如 ...

随机推荐

  1. Ubuntu 14.04中文输入法的安装

    Ubuntu默认自带的中文输入法是IBUS框架的ibus-pinyin,IBUS-Bopomofo等.对于习惯于搜狗,紫光华宇,谷歌拼音的我们可能有点使用不习惯.下面就是安装常用的IBUS中文输入法. ...

  2. NSCalendar

    1.获取当前时间的年月日时分秒    /*    // 获取当前时间    NSDate *now = [NSDate date];    NSLog(@"now = %@", n ...

  3. hnoi 2016 省选总结

    感觉省选好难的说...反正我数据结构太垃圾正解想到了也打不出来打一打暴力就滚粗了! DAY1 0+20+30 DAY2 60-20+0+60 最后170-20分,暴力分还是没有拿全! 然而这次是给了5 ...

  4. Codeforces Round #379 (Div. 2) E. Anton and Tree 树的直径

    E. Anton and Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard i ...

  5. Cocos2d-x优化中纹理优化

    转自 http://blog.csdn.net/tonny_guan/article/details/41016241 Cocos2d-x优化中纹理优化 1.纹理像素格式纹理优化工作的另一重要的指标是 ...

  6. 流媒体基础实践之——RTMP直播推流

    一.RTMP推流:用户可将RTMP视频流推送到阿麦提供的打流地址.地址格式类似于: rtmp://livepush.myqcloud.com/live 现在可以支持哪些直播源?和那些直播软件?推流参数 ...

  7. CentOS6.4_常用命令

    1. 查看本机是否安装了 xxx软件,以及 xxx软件 的版本信息等: rpm -qa |grep  xxx(xxx代表软件名) 2. rpm -ivh 要安装的rpm文件包 3. 不care依赖项的 ...

  8. mysql 编码测试

    insert into t1(v1) values('cn中国'); select * from t1; 1.输入gbk,交互latin1,数据库latin1 insert,客户端把gbk的输入当成l ...

  9. mysql 事件调度器

    1.mysql事件调度器,也就是计划任务,计划做某事,有两种方式: 2.在某个时间点做某事,AT TIMESTAMP [+ INTERVAL INTERVAL] 某个时间点加上偏移. 3.定时地做某事 ...

  10. mysql 倒引号

    1.在mysql中,保留字不能作为表名,字段名等用处,如下:mysql> alter table student add column desc varchar(16) after name;1 ...