用法C ++ 11 std :: unique_lock <std :: mutex> lk(myMutex);不太清楚

时间:2015-06-07 22:12:39

标签: c++ multithreading c++11 concurrency mutex

这基本上是一个并发程序,它实现了一个销售人员的模拟,该销售人员必须为即将到他店铺的一些客户提供服务。这是班级推销员的代码:

class SalesMan
{
    public:
    Room *room; 
    std::unique_lock<std::mutex> *salesman; 
    Salesman(Room *r)
    {
        this->room = r;                         
        salesman = new std::unique_lock<std::mutex>(room->salesman,std::defer_lock_t());
    }
    void operator()()
    {
        while (true)
        {
            if (room->look() == 0) //checks if there are customers awaiting
            {
                std::unique_lock<std::mutex> lk(room->salesman); 
                room->chair.wait(lk); //salesman rests on the chair
            }


            room->waiting.notify_one();  
            room->serving.notify_one(); 
        }
    }
};

Room是一个拥有std::mutex推销员和条件变量chairwaitingserving的类。 我不清楚的是std::unique_lock<std::mutex> lk(room->salesman)做了什么;它是否初始化条件变量使用的互斥锁,还是使线程进入代码的互斥部分? 此外,还有一个名为Customer的类,在其构造函数中具有与salesman构造函数相同的行,但它使用unique_lock互斥锁执行此操作:

salesman->lock()
*buy things*
salesman->unlock()

那么,如果我们不使用锁定/解锁功能,那么“SalesMan”类中的推销员的用法是什么?

0 个答案:

没有答案