• 有两种方法: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. 一个在windows电脑上控制比较全的文件夹的设置方式

    一个在windows电脑上控制比较全的文件夹的设置方式: 1.在桌面上创建一个新建文件夹 2.将新建文件夹重命名为  万能控制模式.{ED7BA470-8E54-465E-825C-99712043E ...

  2. 老毛桃PE修改方法(屏蔽更改主页,屏蔽加装的绿色浏览器)

    虽然老毛桃早就退隐了,虽然这个老毛桃不是曾经那个老毛桃~但是不得不说这个老毛桃PE还是有很多人在用~而且这个老毛桃的PE兼容性,个人认为还是很不错的.就是有暗扣,每次加装一个“绿色浏览器”和锁定主页, ...

  3. SharePoint 元数据服务-PowerShell

    1. 获取元数据服务应用程序标识 Get-SPServiceApplication 2. 获取指定的元数据服务应用程序实例 $metadataApp = Get-SPMetadataServiceAp ...

  4. jQuery trigger()以及注意事项

    trigger() 方法触发被选元素的指定事件类型.例如: $('#pcId').trigger("change") ;//触发id为“pcId”的select的 change事件 ...

  5. Ubuntu:搜狗输入法不能输入中文

    搜狗输入法不能输入中文 问题描述 可以打开搜狗输入法,可以打英文,但是不能切换成中文. 其他输入法正常使用(这个可以判断是不是fcitx是不是出现错误). 有一个关于sogou的内部错误提示 解决方法 ...

  6. poshytip漂亮的表单提示插件

    一款很实用的小插件,在表单的输入框会显示提示信息,你可能会用的它. 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  7. postman-进阶使用

    管理请求 保存请求-添加“打开百度首页请求” 设置请求方式为Get,地址为www.baidu.com.点击右侧保存按钮 在弹出的保存请求中设置保存的内容.Collections:百度,Request ...

  8. Redis缓存系统-Java-Jedis操作Redis,基本操作以及 实现对象保存

    源代码下载:   http://download.csdn.net/detail/jiangtao_st/7623113 1.Maven配置 <dependency> <groupI ...

  9. show point on image

    show point on image... for ( int i = 0; i < probp.size(); i++ ) { cv::Point pt = probp[i]; Distan ...

  10. DelaunayTriangulation_VoronoiDiagram_using_OpenCV的实现

    前言 最近project中有关于delaunay的实现问题,查找资料,看到learnopencv这个网站,有很多peoject的实现,本文主要是实现Delaunay Triangulation and ...