C++ 生产者/消费者实施——需要反馈

C++ 生产者/消费者实施——需要反馈,c++,boost,multithreading,producer-consumer,C++,Boost,Multithreading,Producer Consumer,我正在准备几周后的一次采访,我想我会给一些线索,以及我在学校学到的简单的生产者/消费者问题 很久没做了所以我很好奇你们怎么看?我应该添加什么使其成为更好的示例等。感谢您的反馈!:) ////////////////////////////////////////////////////////////////////////// mutexbuffermutex; 德克缓冲区; 常量int maxBufferSize=5; ////////////////////////////////////

我正在准备几周后的一次采访,我想我会给一些线索,以及我在学校学到的简单的生产者/消费者问题

很久没做了所以我很好奇你们怎么看?我应该添加什么使其成为更好的示例等。感谢您的反馈!:)

//////////////////////////////////////////////////////////////////////////
mutexbuffermutex;
德克缓冲区;
常量int maxBufferSize=5;
//////////////////////////////////////////////////////////////////////////
布尔加杜布弗(国际一)
{
if(buffer.size()cout如果您已经在AddToBuffer和GetFromBuffer之类的调用中包装缓冲区对象,那么将锁定放在包装函数中会更有意义。此外,您正在显式调用unlock,这完全违背了作用域锁定的目的;作用域锁定使用的资源获取是初始化(RAII)获取和释放锁。更好的用法是将关键部分放在块中,以便由于锁超出作用域而释放互斥锁,而不是由于显式调用解锁函数,因为作用域不那么脆弱。例如:

// Code that doesn't need locking
{
    boost::mutex::scoped_lock lck(bufferMutex); // Lock is acquired here
    // Code that needs to be synchronized
} // Lock is automatically released here without explicit call to unlock()
// More code that doesn't need locking
// Code that doesn't need locking
{
    boost::mutex::scoped_lock lck(bufferMutex); // Lock is acquired here
    // Code that needs to be synchronized
} // Lock is automatically released here without explicit call to unlock()
// More code that doesn't need locking