同步技术,等待所有对象都被处理

时间:2015-03-09 05:39:27

标签: c++ multithreading thread-synchronization

在这段代码中,我首先创建一个始终保持运行的线程。然后我创建对象并将它们逐个添加到队列中。线程从队列中逐个拾取对象并对其进行处理并删除它们。

class MyClass
{
    public:
        MyClass();
        ~MyClass();
        Process();
};

std::queue<class MyClass*> MyClassObjQueue;

void ThreadFunctionToProcessAndDeleteObjectsFromQueue()
{
    while(1)
    {
        // Get and Process and then Delete Objects one by one from MyClassObjQueue.
    }
}

void main()
{
    CreateThread (ThreadFunctionToProcessAndDeleteObjectsFromQueue);

    int N = GetNumberOfObjects(); // Call some function that gets value of number of objects

    // Create objects and queue them
    for (int i=0; i<N; i++)
    {
        try
        {
            MyClass* obj = NULL;
            obj = new MyClass;
            MyClassObjQueue.push(obj);
        }
        catch(std::bad_alloc&)
        {
            if(obj) 
                delete obj;
        }
    }

    // Wait till all objects have been processed and destroyed (HOW ???)
}

问题: 在我退出之前,我不确定如何处理所有对象。一种方法是使用while(1)循环和Sleep定期继续检查队列大小。但我认为这是做事的新手。我真的想通过使用线程同步对象(例如semaphore等)以优雅的方式完成它,以便同步函数将等待所有对象完成。但不知道该怎么做。任何意见都将不胜感激。

(注意:我没有在上面的代码中使用同步对象来添加/删除queue。这只是为了保持代码简单和可读。我知道STL容器不是线程安全的)< / p>

0 个答案:

没有答案