C线程同步/异步

 1 #include<windows.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 //#include <afxmt.h>
 5 #define T_MAX 100
 6 int  ticket;
 7 CRITICAL_SECTION CriticalSection;
 8 /* //售票线程
 9 DWORD WINAPI SaleThread(LPVOID lp)
10 {
11 int n = (int) lp;
12 while (ticket > 0)
13 {
14 printf("SaleThread%d sell %dth ticket\n", n, T_MAX-ticket+1);
15 ticket--;
16 Sleep(500);
17 }
18 return 0;
19 }
20
21 void MyThread()
22 {
23 HANDLE handle1,handle2,handle3,handle4,handle5;
24 //5个售票线程
25 handle1 = CreateThread(NULL,NULL,SaleThread,(void*)1,NULL,NULL);
26 handle2 = CreateThread(NULL,NULL,SaleThread,(void*)2,NULL,NULL);
27 handle3 = CreateThread(NULL,NULL,SaleThread,(void*)3,NULL,NULL);
28 handle4 = CreateThread(NULL,NULL,SaleThread,(void*)4,NULL,NULL);
29 handle5 = CreateThread(NULL,NULL,SaleThread,(void*)5,NULL,NULL);
30 }
31 */
32
33 //售票线程
34 DWORD WINAPI SaleThread(LPVOID lp)
35 {
36 int n = (int) lp;
37 while (ticket > 0)
38 { //临界区同步
39 EnterCriticalSection(&CriticalSection);
40 printf("SaleThread%d sell %dth ticket\n", n, T_MAX-ticket+1);
41 ticket--;
42 LeaveCriticalSection(&CriticalSection);
43 Sleep(500);
44 }
45 return 0;
46 }
47 void MyThread()
48 {
49 HANDLE handle1,handle2,handle3,handle4,handle5;
50 //5个售票线程
51 handle1 = CreateThread(NULL,NULL,SaleThread,(void*)1,NULL,NULL);
52 handle2 = CreateThread(NULL,NULL,SaleThread,(void*)2,NULL,NULL);
53 handle3 = CreateThread(NULL,NULL,SaleThread,(void*)3,NULL,NULL);
54 handle4 = CreateThread(NULL,NULL,SaleThread,(void*)4,NULL,NULL);
55 handle5 = CreateThread(NULL,NULL,SaleThread,(void*)5,NULL,NULL);
56 }
57
58 int main(int argc, char* argv[])
59 {
60   ticket=100;
61 //创建临界区对象
62 InitializeCriticalSection(&CriticalSection);
63 if(ticket>0)
64 MyThread();
65 Sleep(50000);
66 //删除临界区对象
67 DeleteCriticalSection(&CriticalSection);
68 return 0;
69 }

时间: 2024-11-05 20:30:56

C线程同步/异步的相关文章

进程&amp;线程 同步异步&amp;阻塞非阻塞

2015-08-19 15:23:38 周三 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对全局变量.静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用 线程不安全就是不提供数

49.Android中线程同步异步方式小结

同步和异步的区别 首先以一个常见的开发场景来区别一下同步和异步的区别,比如我们要获取一张网络图片并完成显示.在这个场景中我们需要开启两个线程,一个是子线程—即下载图片的线程:另外是主 UI 线程—即图片下载完成后进行显示的线程.针对这个场景分别用两幅实现的流程图来区分同步和异步. 从图中可以看到,二者的区别在于:同步时当前主线程会阻塞,直到子线程通知主线程为止(先不考虑ANR):而异步的时候主线程可以继续干其它的事情,当子线程完成任务的时候通知一下主线程就可以了,类似于接口回调或消息队列的思想.

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

一 理解篇 前言 本文仅仅用作借鉴使用,作者刚入行不久,所以请不小心看到这篇文章的朋友,手下留情. 本文以小故事的形式进行叙述,逻辑不通之处.请理解. 如有错误 ,欢迎指出. 谢谢.                                                           最后修改时间:2019-01-25 1.0.0 进程 老刘是一个软件公司的老板,公司下有两个部门,产品设计部门(产品进程)和研发部门(研发进程),产品设计部门在一楼,研发部门在二楼(独立地址空间).

同步异步问题经典文章!!!!

http://www.cnblogs.com/mashang/archive/2009/08/01/1536730.html http://www.cnblogs.com/artech/archive/2009/05/22/1486761.html http://www.cnblogs.com/zhangchenliang/archive/2012/07/26/2610385.html 解决线程同步异步问题? 1. 用什么方法? 2.为什么 Lock就行? 原理? 关键点:1. lock(thi

多线程-线程同步、异步

同步和异步 同步和异步通常用来形容一次方法的调用.同步方法调用一旦开始,调用者必须完成所有的操作一直到方法调用结束,其他调用者才能继续后续的行为, 异步方法调用类似一个消息传递,一旦开始,方法调用就会立即返回,其他调用者则可以无需等待,可以立即继续后续的操作. 异步: 不过, 如果 我们 赶时髦, 就坐 在家 里 打开 电脑, 在 网上 订购 了 一台 空调. 当你 完成 网上 支付 的 时候, 对 你来 说 购物 过程 已经 结束 了. 虽然 空调 还没 送 到家, 但是 你的 任务 都已 经

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么

多线程编程——线程同步与异步

1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是,多线程和异步操作还是有一些区别的.而这些区别造成了使用多线程和异步操作的时机的区别. 2.异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础. 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘.光驱的技术规格中都有明确DMA的模式指标,其实网卡.声卡.显卡也是有DMA

js的线程和同步异步以及console.log机制

项目上线了,闲下来就写写东西吧.积累了好多东西都没有做笔记~挑几个印象深刻的记录一下吧. js的同步异步以及单线程问题: 都知道单线程是js的一大特性.但是通常io(ajax获取服务器数据).用户/浏览器自执行事件(onclick.onload.onkeyup等等)以及定时器(setTimeout.setInterval)这些异步操作又是怎样工作的呢. 我们把js的任务分为两种:同步任务,异步任务: 举个例子吧:   let a=1; console.log("同步任务"): setT

线程的同步异步

线程同步.异步的概念:   1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程处理的数据,而B线程又修改了A线程处理的数据,显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源争夺最激烈的地方,这样就实现了线程的同步机制.   同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去.