Semaphore built from mutex in C++11

#include <mutex>
#include <condition_variable>
using namespace std;

class semaphore{
private:
    mutex mtx;
    condition_variable cv;
    int count;

public:
    semaphore(int count_ = 0):count(count_){;}
    void notify()
    {
        unique_lock<mutex> lck(mtx);
        ++count;
        cv.notify_one();
    }
    void wait()
    {
        unique_lock<mutex> lck(mtx);

        while(count == 0){
            cv.wait(lck);
        }
        count--;
    }
};
时间: 2024-10-11 07:14:45

Semaphore built from mutex in C++11的相关文章

Samsung_tiny4412(笔记)--&gt;spinlock,semaphore,atomic,mutex,completion,interrupt

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->spinlock,semaphore,atomic,mutex,completion,interrupt * * 声明: * 1. 本文中有些源代码没有全部帖出来,主要是因为篇幅太大的原因; * 2. 基于1中的原因,本文借鉴了python中的缩进代码风格进行代码的体现: *

C++11 实现信号量Semaphore类

1 #pragma once 2 #include <mutex> 3 #include <condition_variable> 4 class Semaphore 5 { 6 public: 7 explicit Semaphore(unsigned int count); //用无符号数表示信号量资源 8 ~Semaphore(); 9 public: 10 void wait(); 11 void signal(); 12 private: 13 int m_count;

线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁

当涉及到多线程共享数据,需要数据同步的时候,就可以考虑使用线程锁了.本篇体验线程锁的各种用法以及线程死锁.主要包括: ※ 使用lock处理数据同步※ 使用Monitor.Enter和Monitor.Exit处理数据同步※ 使用Mutex处理进程间数据同步※ 使用Semaphore处理数据同步※ 线程死锁 □ 使用lock处理数据同步 假设有一个类,主要用来计算该类2个字段的商,在计算商的方法之内让被除数自减,即被除数有可能为零.使用lock语句块保证每次只有一个线程进入该方法. class Th

C++11并发之std::mutex

知识链接: C++11并发之std::thread   本文概要: 1. 头文件. 2.std::mutex. 3.std::recursive_mutex. 4.std::time_mutex. 5.std::lock_guard 与 std::unique_lock. Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 #include 头文件中,所以如果你需要使用 std::mutex,就必须包含 #include 头文件. 1. 头文件. Mute

synchronization mutex &amp;semaphore completion &amp;example

Linux offers two kinds of semaphores: ? Kernel semaphores, which are used by kernel control paths ? System V IPC semaphores, which are used by User Mode processes struct semaphore { spinlock_t lock; unsigned int count; struct list_headwait_list; }; s

C++11 并发指南三(std::mutex 详解)

C++11 并发指南三(std::mutex 详解) 上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 <mutex> 头文件中,所以如果你需要使用 std::mutex,就必须包含 <mutex> 头文件. <mutex> 头文件介绍 Mu

java中的计数信号量(Counting Semaphore)

信号量(Semaphore)又称为信号量.旗语,它以一个整数变数,提供信号,以确保在并行计算环境中,不同进程在访问共享资源时,不会发生冲突.是一种不需要使用忙碌等待(busy waiting)的一种方法. 信号量的概念是由荷兰计算机科学家艾兹格·迪杰斯特拉(Edsger W. Dijkstra)发明的,广泛的应用于不同的操作系统中.在系统中,给予每一个进程一个信号量,代表每个进程目前的状态,未得到控制权的进程会在特定地方被强迫停下来,等待可以继续进行的信号到来.如果信号量是一个任意的整数,通常被

#include &lt;mutex&gt;

多线程初级 1 #include <iostream> 2 #include <thread> 3 #include <windows.h> 4 #include <mutex> 5 6 //两个线程并行访问一个变量 7 8 int g_num = 20;//找到或者找不到的标识 9 std::mutex g_mutex; 10 11 void goA(int num) 12 { 13 g_mutex.lock();//你访问的变量,在你访问期间,别人访问不

C++并发编程(C++11)

前言 首先需要说明,本博客的主要内容参考自Forhappy && Haippy博主的分享,本人主要是参照博主的资料进行了学习和总结,并适当的衍生或补充了相关的其他知识内容. C++11有了std::thread 以后,可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高. C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是,,,和. :该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风