用三个线程按顺序循环打印ABC三个字母
- 有两种方法:semaphore信号量和mutex互斥锁。需要注意的是C++11已经没有semaphore。
- C++ 并发编程(六):信号量(Semaphore) - 止于至善 - SegmentFault 思否
- https://segmentfault.com/a/1190000006818772
- C++ 并发编程(六):信号量(Semaphore) - 止于至善 - SegmentFault 思否
- 线程按顺序执行(迅雷笔试题) - CSDN博客
- http://blog.csdn.net/mafuli007/article/details/8488534
- mutex - C++ Reference
- http://www.cplusplus.com/reference/mutex/mutex/
//
// main.cpp
// LeetCode
//
// Created by Hao on 2017/3/16.
// Copyright © 2017年 Hao. All rights reserved.
//
#include <iostream> // std::cout
#include <thread> // std::thread, std::this_thread::sleep_for
#include <chrono> // std::chrono::seconds
#include <mutex> // std::mutex std::mutex mtx; // mutex for critical section
int count = ;
int num_count = ; void print_block_0 (int n) {
// critical section (exclusive access to std::cout signaled by locking mtx):
while (true) {
if (count % == ) {
mtx.lock(); ++ count; std::cout << "A" << std::endl; mtx.unlock();
} if (num_count == ) break;
}
} void print_block_1 (int n) {
// critical section (exclusive access to std::cout signaled by locking mtx):
while (true) {
if (count % == ) {
mtx.lock(); ++ count; std::cout << "B" << std::endl; mtx.unlock();
} if (num_count == ) break;
}
} void print_block_2 (int n) {
// critical section (exclusive access to std::cout signaled by locking mtx):
while (true) {
if (count % == ) {
mtx.lock(); ++ num_count; // must be executed prior to the following statement, or else an extra "A" would be printed ++ count; std::cout << "C" << std::endl; // std::this_thread::sleep_for (std::chrono::seconds(1)); // sleep in case that an extra "A" is printed mtx.unlock();
} if (num_count == ) break;
}
} int main()
{
std::thread threads[]; // default-constructed threads std::cout << "Spawning 3 threads...\n"; threads[] = std::thread(print_block_0, ); // move-assign threads
threads[] = std::thread(print_block_1, ); // move-assign threads
threads[] = std::thread(print_block_2, ); // move-assign threads std::cout << "Done spawning threads. Now waiting for them to join:\n";
for (int i=; i<; ++i)
threads[i].join(); std::cout << "All threads joined!\n"; return ;
}
用三个线程按顺序循环打印ABC三个字母的更多相关文章
- 多线程面试题之【三线程按顺序交替打印ABC的方法】
建立三个线程,线程名字分别为:A.B.C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印.打印10轮,打印完毕控制台输出字符串:&q ...
- Java多线程循环打印ABC的5种实现方法
https://blog.csdn.net/weixin_39723337/article/details/80352783 题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环 ...
- python 多线程实现循环打印 abc
python 多线程实现循环打印 abc 好久没写过python了, 想自己实践一下把 非阻塞版 import threading import time def print_a(): global ...
- 多个线程分别顺序交替打印一种不同字符abcdefg(已实现随便多少个线程打印多少个字符,利用线程池实现多线程)
下面实现多线程顺序打印字符"abcdefg": 实现Runnable接口: /** * @author: rhyme * @date: 2019-08-17 14:39 * @to ...
- 多线程循环打印ABC
主要是利用线程的wait()和notify()来实现 public class MyThread implements Runnable { private String name; private ...
- 【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C
[背景]这个题目是当时远程面试时,手写的题目.自己比较惭愧,当时写的并不好,面试完就又好好的完善了下. 一.题意分析 3个线程要按顺序执行,就要通过线程通信去控制这3个线程的执行顺序. 而线程通信的方 ...
- 三个线程abc顺序执行
1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o) public class ThreadThreadp { private int fl ...
- java Semaphore实现ABC三个线程循环打印
Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...
- 三个线程T1,T2,T3.保证顺序执行的三种方法
经常看见面试题:有三个线程T1,T2,T3,有什么方法可以确保它们按顺序执行.今天手写测试了一下,下面贴出目前想到的3种实现方式 说明:这里在线程中我都用到了sleep方法,目的是更容易发现问题.之前 ...
随机推荐
- tf.nn的conv2d卷积与max_pool池化
tf.nn.conv2d(value,filter,strides,[...]) 对于图片来说 value : 形状通常是np.array()类型的4维数组也称tensor(张量), (batc ...
- Win7下的flutter环境安装配置
随着 2018 年底 GOOGLE 正式发布了 flutter1.0,这个原生开发框架大火,试用了一下确实不错,代码状态即时刷新,所见即所得.APP 开发的环境安装,比较复杂,很多初学者在这一步就被 ...
- 玩转X-CTR100 l STM32F4 l ESP8266串口WIFI模块
我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]- ESP8266是一款非常火的WIFI模块,性价 ...
- DevExpress v17.2新版亮点—WPF篇(四)
DevExpress年终击穿底价,单套授权低至67折!仅剩最后6天!查看详情>>> 用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内 ...
- ReentrantLock的原理解析
重入锁(ReentrantLock)是一种可重入无阻塞的同步机制.性能同synchronized接近(老版本jdk中性能很差). 下面重点看下常用的lock()和unlock()方法的实现原理. lo ...
- avalon源码阅读(1)
来源 写angularJS源码阅读系列的时候,写的太垃圾了. 一个月后看,真心不忍直视,以后有机会的话得重写. 这次写avalonJS,希望能在代码架构层面多些一点,少上源码.多写思路. avalon ...
- HDU 4135:Co-prime(容斥+二进制拆分)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 1872:稳定排序
稳定排序 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 在windows下制作mac os x的启动安装U盘
前几天有幸用了下Macbook pro,可在给它装win 7系统时,无知而又手贱地在windows系统下分区了:( 然后再重启就找不到Mac os x,只有win 7了.可进win 7也不正常,直接给 ...
- 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】
MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...