• 有两种方法: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. js图片切换 带左右控制的

    代码下载

  2. JQ插件写法 扩展JQ方法

    目录: 1.基本JQ扩展插件js的格式 2.对JQ选中元素的方法的扩展,调用类似于$("selector").myMethod(),这里的myMethod是自己扩展的方法,与.cl ...

  3. RNN - LSTM - GRU

    循环神经网络 (Recurrent Neural Network,RNN) 是一类具有短期记忆能力的神经网络,因而常用于序列建模.本篇先总结 RNN 的基本概念,以及其训练中时常遇到梯度爆炸和梯度消失 ...

  4. 《Effective Java 第二版》读书笔记

    想成为更优秀,更高效程序员,请阅读此书.总计78个条目,每个对应一个规则. 第二章 创建和销毁对象 一,考虑用静态工厂方法代替构造器 二, 遇到多个构造器参数时要考虑用builder模式 /** * ...

  5. 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement II - Transmit Spectrum Mask & Current Consumption

    Transmit Spectrum Mask Specification – 802.11b SpecificationFor 802.11b 18.4.7.3The transmitted spec ...

  6. tomcat部署和启动2

    catalina run 启动服务器后,按下CTRL+C,停止服务器,选择"y",退回到正常命令行. catalina stop

  7. HDU 1853

    http://acm.hdu.edu.cn/showproblem.php?pid=1853 和下题一模一样,求一个图环的并,此题的题干说的非常之裸露 http://www.cnblogs.com/x ...

  8. Python模块 实现过渡性模块重载

    本文是在阅读Python 学习手册后  感觉比较不错的一个实现模块重载的一个模块,该模块可以实现对已经加载在运行程序中的模块实现重新加载,并且该模块可以递归的实现对要重新加载的模块内所引用的其它模块的 ...

  9. Android App data write as file data with synchronous Demo

    package com.android.utils; import java.io.File; import java.io.IOException; import java.io.RandomAcc ...

  10. HihoCoder - 1867: GCD (莫比乌斯容斥)

    Sample Input 6 1 6 2 5 3 4 Sample Output 10 You are given a {1, 2, ..., n}-permutation a[1], a[2], . ...