首页 > 其他分享 >std list多线程使用

std list多线程使用

时间:2023-09-07 18:25:27浏览次数:47  
标签:std include lock list mutex 多线程 my

#include <iostream>
#include <list>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <unistd.h>

std::list<int> my_list;
std::mutex my_mutex;
std::condition_variable my_cond;

void add_element(int value)
{
    while (1)
    {
        {
            std::unique_lock<std::mutex> lock(my_mutex);
            if (my_list.size() < 100)
            {
                my_list.push_back(value);
            }
        }
        usleep(10);
    }
}

void remove_element()
{

    while (1)
    {
        // sleep(1);
        if (!my_list.empty())
        {
            std::cout << my_list.size();
            std::unique_lock<std::mutex> lock(my_mutex);
            int value = my_list.front();
            my_list.pop_front();

            std::cout << " Removed: " << value << std::endl;
        }
        usleep(1);
    }
}

int main()
{
    std::cout << "start" << std::endl;

    std::thread t1(add_element, 1);
    // sleep(1);

    std::thread t2(add_element, 2);
    std::thread t3(add_element, 3);
    std::thread t4(remove_element);
    t1.join();
    t2.join();
    t3.join();
    return 0;
}

  

标签:std,include,lock,list,mutex,多线程,my
From: https://www.cnblogs.com/ahuo/p/17685752.html

相关文章

  • LRUCache算法缓存策略(map+doubleLinkedList)
    packagearithmetic;importjava.util.HashMap;publicclassFaceTest81{//LRUcache缓存策略map+双向链表//get、update、put需要时间复杂度达到O1//map+双向链表结构publicFaceTest81(intcapacity){ cache=newMyCache(capacity);}privateMyCache<Integer,Intege......
  • Heritrix的多线程ToeThread和ToePool
    4、Heritrix的多线程ToeThread和ToePool要想更有效更快捷地抓取网页内容,则必须采用多线程。Heritirx提供了一个标准的线程池ToeThread,用于管理所有的抓取线程。org.archive.crawler.frameworkClassToePooljava.lang.Objectjava.lang.ThreadGrouporg.archi......
  • 杰哥教你面试之一百问系列:java中高级多线程concurrent的使用
    目录问题1:什么是ConcurrentHashMap?它与HashMap的区别是什么?问题2:什么是CopyOnWriteArrayList?它适用于什么样的场景?问题3:什么是BlockingQueue?它的作用是什么?举例说明一个使用场景。问题4:什么是Semaphore?它如何控制并发访问?问题5:什么是CountDownLatch?它适用于什么场景?问题6:什么是Cyc......
  • C#List导出Excel
    1.导入NPOI2.引用如下内容usingNPOI.XSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.HSSF.UserModel;usingSystem.IO;3.List数据1).如果是Json类型数据从前台传递到后台,用如下方式获取前台数据;注:数据类是自定义的类;Key是前台传到后台的键名List<数据类>list=  ......
  • java多线程几个方法的基本概念
    一、run()和start()这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用run()方法,这是由Java的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.二、关键字Synchronized这个关键字用于保护共享数据,当然......
  • 【Redis】Could not create server TCP listening socket __6379_ bind_ 在一个非套接
    问题描述:安装Redis,redis-server无法启动,报错。[34420]20Aug21:43:21.110#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo[34420]20Aug21:43:21.110#Redisversion=5.0.14.1,bits=64,commit=ec77f72d,modified=0,pid=34420,juststarted[34420]20Aug21:43:21.1......
  • C语言 <stddef.h> 常用定义
    <stddef.h>头文件是C语言标准库的头文件之一,其中定义了常用的宏和类型,但是没有声明任何函数。类型定义ptrdiff_t:该类型主要用于指针的相减运算的返回类型,下面是在头文件中找到的源代码定义#ifndef__PTRDIFF_TYPE__#ifdef_WIN64#define__PTRDIFF_TYPE__long......
  • 关于多线程的相关概念
    多线程多线程的好处多线程可以提高CPU的使用效率比如单线程运行时遇到网络等待的耗时操作时,只能乖乖的等待,且交互终端但是多线程的情况下,一个线程负责交互,另一个负责计算线程的访问权限知道哪些数据是线程私有,哪些变量是线程之间共享数据线程调度和优先级当线程数量......
  • Java低代码开发:jvs-list(列表引擎)功能(二)字段及样式配置
    字段的增减进入列表页设计器-页表设计界面,点击新增一行、或者删除按钮,可以对字段进行增减操作,如果对于权限的列表页,可以使用批量创建字段的按钮:字段的批量设置,点击批量添加如下图所示字段为中文名称,每一行为一个字段,默认去除空格默认字段系统提供创建人、创建时间、修改人、修改时......
  • Checklist Generator: 革新工作流程的智能清单创建工具
    ChecklistGenerator是一款由人工智能驱动的清单创建工具,它正在彻底改变工作流程。只需输入简短的描述,ChecklistGenerator将为您创建可定制和全面的清单模板,帮助您快速启动为您的业务创建工作流程。概述在如今快节奏的工作环境中,清单是我们提高效率、避免错误和确保任务顺利完......