`

条件变量

 
阅读更多
#include <iostream>
#include <deque>
#include <thread>
#include <mutex>
#include <condition_variable>

std::deque<int> q;
std::mutex mu;
std::condition_variable cond;
int g_count = 5;

void producer() {
    int count = 0;
    while (count < g_count) {
        std::unique_lock<std::mutex> locker(mu);
        q.push_front(++count);
        std::cout << "produce: " << count << std::endl;
        locker.unlock();
        cond.notify_one();  // Notify one waiting thread, if there is one.
        std::this_thread::sleep_for(std::chrono::seconds(1));

    }
}

void consumer() {
    int data = 0;
    while ( data != g_count) {
        std::unique_lock<std::mutex> locker(mu);
        while(q.empty())
            cond.wait(locker); // Unlock mu and wait to be notified
        data = q.back();
        q.pop_back();
        locker.unlock();
        std::cout << "consume: " << data << std::endl;
    }
}
int main() {
    std::thread t1(producer);
    std::thread t2(consumer);
    t1.join();
    t2.join();
    return 0;
}



produce: 1
consume: 1
produce: 2
consume: 2
produce: 3
consume: 3
produce: 4
consume: 4
produce: 5
consume: 5
分享到:
评论

相关推荐

    Linux互斥锁、条件变量和信号量

    在多线程编程中,确保线程安全是至关重要的,特别是在Linux系统中,为了管理共享资源,Linux提供了互斥锁、条件变量和信号量这三种同步机制。它们都是用于协调多个线程对共享数据的访问,防止数据不一致性和竞态条件...

    多线程之条件变量

    在多线程编程中,条件变量(Condition Variables)是一种重要的同步机制,用于线程间的通信和协调。条件变量允许线程在满足特定条件时挂起执行,等待其他线程改变状态,然后再唤醒继续执行。这种方式使得线程可以...

    互斥锁与条件变量详解 疑问全解

    互斥锁与条件变量详解 互斥锁(Mutex)是多线程编程中最基本的同步机制之一,它用于保护共享资源免受多个线程同时访问的干扰。条件变量(Condition Variable)则是另一个重要的同步机制,它允许线程在满足特定条件...

    linux无亲缘关系间进程同步通信实现(互斥锁+条件变量+共享内存模式)

    本主题将深入探讨如何使用互斥锁、条件变量以及共享内存这三种机制来实现无亲缘关系间进程的同步通信。 1. **互斥锁(Mutex)**: 互斥锁是一种基本的同步原语,用于保护共享资源。当一个进程获取了互斥锁后,其他...

    linux无亲缘关系进程间通信(互斥锁+条件变量+共享内存)

    本示例中提到的“linux无亲缘关系进程间通信”着重讲解了如何利用互斥锁(Mutex)、条件变量(Condition Variable)以及共享内存(Shared Memory)这三种机制来实现非父子进程间的同步通信。 1. **互斥锁**:互斥锁...

    C++跨平台条件变量和互斥锁封装

    本示例着重讲解如何利用C++标准库中的互斥锁(mutex)和条件变量(condition variable)进行线程同步,并实现跨平台的封装。这些工具是多线程编程中的关键组成部分,用于确保共享资源的安全访问。 首先,让我们了解...

    临界区和条件变量实现读写者问题

    在多线程编程中,临界区(Critical Section)和条件变量(Conditional Variables)是解决并发控制问题的重要工具。在给定的“临界区和条件变量实现读写者问题”示例中,我们将深入探讨如何利用这两个概念来解决经典...

    互斥锁、条件变量、信号量总结

    互斥锁、条件变量和信号量是操作系统中用于线程同步和资源管理的重要工具,尤其在多线程和多进程编程中发挥着关键作用。这些机制确保了共享资源的有序访问,防止数据竞争和死锁等问题的发生。 首先,互斥锁(Mutex...

    线程同步 条件变量

    pthread 条件变量,线程同步

    线程池与条件变量

    讲述线程池如何创建以及代码的编写,条件变量的使用。

    线程池.zip,互斥锁+条件变量+队列,实现线程池,包括线程池的创建,塞任务,和销毁线程池

    在本压缩包"线程池.zip"中,我们可以看到涉及到的核心概念有:线程池、互斥锁、条件变量以及队列。 线程池: 线程池是程序中预创建的一组可重用线程,这些线程在等待执行任务。当有新的任务到来时,线程池会挑选一...

    条件变量交替控制多线程共享资源

    适合linux-c网络编程初学者学习的多线程控制,linux下编译通过,通过互斥锁和条件变量,最终线程的运行结果输出到txt文件中。

    c语言跨平台条件变量封装

    条件变量所为一种线程安全对象,在多线程开发中,是有一些使用场景的,比如多个线程协作执行任务,或者生产者消费者模式的实现,都可以使用条件变量来进行线程控制。c语言做多线程开发,实现一个跨平台条件变量量...

    linux线程池 条件变量

    条件变量(Condition Variables)是线程同步的一种工具,它允许线程在满足特定条件时等待,只有当其他线程改变了这个条件,等待的线程才会被唤醒。条件变量与互斥锁(Mutexes)配合使用,可以实现更灵活的线程同步...

    多线程编程——条件变量使用(Jack_pthread_cond_test.rar)

    多线程编程:条件变量使用。 打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行...

    linux条件变量简单讲解.pdf

    在Linux多线程编程中,条件变量是一种同步机制,允许线程等待某个条件成立。条件变量通常与互斥锁(mutex)一起使用,以避免竞争条件(Race Condition)和确保线程间的同步。本篇讲解将详细介绍Linux条件变量的基本...

    第三十章-条件变量1

    【第三十章 - 条件变量1】章节主要讲解了如何使用条件变量来解决生产者/消费者问题。条件变量是一种同步机制,允许线程在特定条件满足时等待,而当其他线程改变条件时唤醒它们。这个章节通过一系列实际代码示例来...

    Linux系统编程-(pthread)线程通信(条件变量).pdf

    【Linux系统编程——pthread线程通信(条件变量)】 在多线程编程中,线程间的通信是非常重要的,条件变量(Condition Variables)是POSIX线程(pthread)库提供的一种同步机制,它允许线程在特定条件满足时才能继续...

    linux条件变量简单讲解[归类].pdf

    条件变量是Linux多线程编程中一种重要的同步机制,它允许线程在特定条件不满足时挂起等待,直到其他线程改变了这个条件并发出信号。这种方式使得线程间的协作更加灵活,避免了不必要的资源浪费。 条件变量的类型是`...

    5. 通知状态的改变—POSIX条件变量1

    POSIX条件变量是一种机制,允许线程在特定条件满足时才继续执行,从而有效地协调线程间的协作。这种机制通常与互斥量结合使用,以实现高效、低开销的同步。 **条件变量的作用:** 条件变量允许一个线程等待某个共享...

Global site tag (gtag.js) - Google Analytics