c++多线程编程(二)
这是道面试题目:有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC…
见代码:
#include <iostream>
#include <Windows.h> using namespace std; HANDLE hMutex;
int counts = ;
int flag = ; void t1();
void t2();
void t3(); int main() {
HANDLE hThread = CreateThread(NULL, , (LPTHREAD_START_ROUTINE)t1, NULL, , NULL);
hThread = CreateThread(NULL, , (LPTHREAD_START_ROUTINE)t2, NULL, , NULL);
hThread = CreateThread(NULL, , (LPTHREAD_START_ROUTINE)t3, NULL, , NULL);
hMutex = CreateMutex(NULL, FALSE, L"lvhuan");
CloseHandle(hThread);
while(counts<){
Sleep();
}
return ;
}
void t1() {
while (counts < ) {
WaitForSingleObject(hMutex, INFINITE);
if (flag == ) {
flag = ;
cout << 'A' << endl;
counts++;
}
ReleaseMutex(hMutex);
}
}
void t2() {
while (counts < ) {
WaitForSingleObject(hMutex, INFINITE);
if (flag == ) {
flag = ;
cout << 'B' << endl;
counts++;
}
ReleaseMutex(hMutex);
}
}
void t3() {
while (counts < ) {
WaitForSingleObject(hMutex, INFINITE);
if (flag == ) {
flag = ;
cout << 'C' << endl;
counts++;
}
ReleaseMutex(hMutex);
}
}
这里给个java版本的链接:http://mouselearnjava.iteye.com/blog/1949228?utm_source=tuicool&utm_medium=referral
c++多线程编程(二)的更多相关文章
- Linux系统编程@多线程编程(二)
线程的操作 线程标识 线程的ID表示数据类型:pthread_t (内核中的实现是unsigned long/unsigned int/指向pthread结构的指针(不可移植)几种类型) 1.对两个线 ...
- java多线程编程(二)
1. wait 和 sleep 区别? 1.wait可以指定时间也可以不指定,sleep必须指定时间. 2.在同步中时,对cpu的执行权和锁的处理不同. wait:释放执行权,释放锁. sleep ...
- java多线程编程(二创建线程)
1.概念 因为java是完全面向对象的,所以在java中,我们说的线程,就是Thread类的一个实例对象.所以,一个线程就是一个对象,它有自己字段和方法. 2.创建线程 创建线程有 ...
- Android多线程编程<二>Handler异步消息处理机制之Message
Message(消息): 一. Message的字段: 在Android中,Message作为线程之间(主要是子线程和UI主线程之间)数据交换的载体,通过Handler去传递.它 ...
- C++多线程编程二
1. 死锁与解锁: #include <iostream> #include <thread> #include <mutex> using namespace s ...
- C语言多线程编程二
一. 线程通信----事件: 1.一对一模式: #include <stdio.h> #include <stdlib.h> #include <Windows.h> ...
- Windows下多线程编程(二)
线程的分类 1. 有消息循环线程 MFC中有用户界面线程,从CWinThread派生出一个新的类作为UI线程类CUIThread,然后调用AfxBeginthread(RUNTIME_CLAS ...
- UNIX环境编程学习笔记(27)——多线程编程(二):控制线程属性
lienhua342014-11-09 1 线程属性概括 POSIX 线程的主要属性包括 scope 属性.detach 属性.堆栈地址.堆栈大小.优先级.在头文件 pthread.h 中定义了结构体 ...
- 多线程编程(二)-Exchanger的使用
Exchanger的介绍 类Exchanger的功能可以使两个线程之间传输数据. 方法exchange()的使用 package com.wjg.unit; import java.util.conc ...
- 多线程编程<二>
wait()与notify(): 1 public class ThreadComDemo { 2 public static void main(String[] args) { 3 try { 4 ...
随机推荐
- 使用iptables nat进行端口转发
1.将发向HostA:PortA的请求转发到HostB:PortB iptables -t nat -A PREROUTING -p tcp -i eth0 -d HostA --dport Port ...
- BZOJ - 3196 Tyvj 1730 二逼平衡树 (线段树套treap)
题目链接 区间线段树套treap,空间复杂度$O(nlogn)$,时间复杂度除了查询区间k大是$O(log^3n)$以外都是$O(log^2n)$的. (据说线段树套线段树.树状数组套线段树也能过?) ...
- HihoCoder 1097 kruscal
最小生成树二·Kruscal算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了——但是幸运的 ...
- 使用.NET Remoting开发分布式应用——基于租约的生存期
一.概述 知名类型的SingleCall对象可以在客户程序的方法调用之后被垃圾收集器清理掉,因为它没有保持状态,属于无状态的.而客户激活的类型的对象和知名类型的SingleTon对象都属于生存期长的对 ...
- slabtop 监控实时内核片缓存信息
使用 slabtop命令监控实时内核片缓存信息 默认情况下,sl ...
- 使用妹子UI开发的体验分享
前阵子看到一个类似bootstrap的前端UI框架,好奇心驱使下,去琢磨了一些,最终决定网站改版用这个UI试试效果: 首页+头部: 投稿页: 现成拷贝过来的评论列表: 总结: 上手难度: (熟悉boo ...
- 命令行调用远程dubbo服务
有时需要对dubbo服务做个简单的测试,或者想看下某个dubbo服务类所提供的方法,可以直接在命令行通过telnet的方式来查看和调用dubbo服务,方法如下: telnet 127.0.0.1 20 ...
- 1111 Online Map
题意:给定一个图,以及起点和终点,需要我们计算两条路径.第1条路径:距离最短路径,若不唯一,则选择用时最短的那一条:第2条路径:用时最少路径,若不唯一,选择经过结点数最少的那一条. 思路:两次Dijk ...
- 1060 Are They Equal
题意: 给出两个浮点数(最大不超过10^100),以及存储的有效位数,判断这两个数是否相等.如12300和12358.9若存储的有效位数为3,则均表示为0.123*10^5,因此视为相等. 思路:[字 ...
- Laravel5 cookie和session设置 Cookie::queue()自动添加
Cookies Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性. 获取一个指定的cookie值 $valu ...