std list多线程使用

发布时间 2023-09-07 18:11:44作者: ahuo
#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;
}