C线程同步/异步

时间:2021-05-15 23:10:14
 #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. 进程&amp&semi;线程 同步异步&amp&semi;阻塞非阻塞

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

  2. C&num; 【一】进程 &comma; 线程 &comma; 微线程 &comma; 同步 &comma; 异步 &comma; 并发 &comma; 并行 &comma; 阻塞 &comma; 非阻塞

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

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

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

  4. Day13&lowbar;71&lowbar;线程同步&lpar;synchronized&rpar;

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 新手之自动转存DLL——20150626星期五

    -------------------菜鸟错例一:--------------------------------------------- int a=0; if() { int a = GetTy ...

  2. Android中使用ViewPager实现广告条

    我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中Vie ...

  3. Active MQ C&num;实现

    原文链接: Active MQ C#实现 内容概要 主要以源码的形式介绍如何用C#实现同Active MQ 的通讯.本文假设你已经正确安装JDK1.6.x,了解Active MQ并有一定的编程基础. ...

  4. Elasticsearch搜索之best&lowbar;fields分析

    顾名思义,best_field就是获取最佳匹配的field,另个可以通过tie_breaker来控制其他field的得分,boost可以设置权重(默认都为1). 下面从宏观上来讲的简单公式: scor ...

  5. Hibernate级联操作解密(inverse和cascade)

    总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/u ...

  6. Javascript 内核Bug

    Javascript 内核Bug: js 执行(9.9+19.8)加法运算 等于 29.700000000000003) <html> <head> <title> ...

  7. erlang二进制

    在Erlang中写处理二进制数据的代码是洋溢着幸福感的,它对于二进制强大的表现力甚至能让你忘掉了它种种不便,今天我们说说Erlang的二进制数据处理. Erlang中bit string代表无类型的内 ...

  8. 浅谈为什么一个java源文件中只能有一个public类?

    声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...

  9. sqlserver批量导出存储过程、函数、视图

    select text from syscomments s1 join sysobjects s2 on s1.id=s2.id  where xtype = 'V' xtype V   视图 P  ...

  10. Linux内核的架构

    GNU/Linux操作系统架构 备注:IPC进程间通.IPC(Inter-Process Communication)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道 ...