• 有两种方法:semaphore信号量和mutex互斥锁。需要注意的是C++11已经没有semaphore。

    • C++ 并发编程(六):信号量(Semaphore) - 止于至善 - SegmentFault 思否

      • https://segmentfault.com/a/1190000006818772
  • 线程按顺序执行(迅雷笔试题) - 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三个字母的更多相关文章

  1. 多线程面试题之【三线程按顺序交替打印ABC的方法】

    建立三个线程,线程名字分别为:A.B.C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印.打印10轮,打印完毕控制台输出字符串:&q ...

  2. Java多线程循环打印ABC的5种实现方法

    https://blog.csdn.net/weixin_39723337/article/details/80352783 题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环 ...

  3. python 多线程实现循环打印 abc

    python 多线程实现循环打印 abc 好久没写过python了, 想自己实践一下把 非阻塞版 import threading import time def print_a(): global ...

  4. 多个线程分别顺序交替打印一种不同字符abcdefg(已实现随便多少个线程打印多少个字符,利用线程池实现多线程)

    下面实现多线程顺序打印字符"abcdefg": 实现Runnable接口: /** * @author: rhyme * @date: 2019-08-17 14:39 * @to ...

  5. 多线程循环打印ABC

    主要是利用线程的wait()和notify()来实现 public class MyThread implements Runnable { private String name; private ...

  6. 【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C

    [背景]这个题目是当时远程面试时,手写的题目.自己比较惭愧,当时写的并不好,面试完就又好好的完善了下. 一.题意分析 3个线程要按顺序执行,就要通过线程通信去控制这3个线程的执行顺序. 而线程通信的方 ...

  7. 三个线程abc顺序执行

    1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o) public class ThreadThreadp { private int fl ...

  8. java Semaphore实现ABC三个线程循环打印

    Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...

  9. 三个线程T1,T2,T3.保证顺序执行的三种方法

    经常看见面试题:有三个线程T1,T2,T3,有什么方法可以确保它们按顺序执行.今天手写测试了一下,下面贴出目前想到的3种实现方式 说明:这里在线程中我都用到了sleep方法,目的是更容易发现问题.之前 ...

随机推荐

  1. MyEclipse WebSphere开发教程:WebSphere 8安装指南(一)

    [周年庆]MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] IBM为使用WebSphere测试应用程序的开发人员提供了免费的WebSphere Ap ...

  2. 2018-2019-2 网络对抗技术 20165202 Exp5 MSF基础应用

    博客目录 一.实践目标 二.实践内容 一个主动攻击实践,ms08_067(成功).ms03_026(成功且唯一); 一个针对浏览器的攻击,如ms11_050(成功)ms11_03(失败.唯一)ms10 ...

  3. mysql数据库索引相关

    一 介绍 什么是索引? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是 ...

  4. JVM自动内存管理:对象判定和回收算法

    可回收对象的判断方法 1.引用计数算法 2.可达性分析算法 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是 ...

  5. 图片预加载 js css预加载

    图片预加载, 效果非常明显, 特别是有多个图, 方法很简单 , 体验提升了不少 <div class="hidden">        <script type= ...

  6. NSScanner

    NSScanner NSScanner:该类主要实现对字符串扫描.并且该扫描必须从头到尾扫描(也可以跳到指定的地方进行扫描),开始扫描必须应用到函数,连续的数字之间可以用空格隔开,如:35 15.2 ...

  7. Python 日志管理封装

    封装python中的logging方便日常使用 class Logger(object): level_mapping = { 'debug': logging.DEBUG, 'info': logg ...

  8. Java Iterator的一般用法

    Iterator(迭代器) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的I ...

  9. 大龄码农那些事——也谈996.ICU

    1.背景 近期Github突然有一个开源项目火了,叫“996.icu”,开源地址:https://github.com/996icu/996.ICU ,目前star的人数截止我写这篇博文时已经高达17 ...

  10. stm32 SPI介绍和配置

    SPI是一种高速的,全双工同步的通信总线,在芯片管脚上占用了四根线,节约了芯片的管脚,同时为PCB的布局节省了空间,提供了方便,因此越来越多的芯片集成了这种通信协议,STM32也就有了SPI接口. 有 ...