小编Sam*_*dat的帖子

boost :: mutex :: scoped_lock已被使用,它有时会抛出异常

我使用的scoped_lock在我的多线程代码专门访问代码的某些部分,但有时它会抛出该异常访问冲突写入位置.......

boost::mutex mMutex;    
boost::condition mInputQueueNotEmpty;    
Job* MyThreadPool<Job, JobOutput>::GetNextJob()  
{    
    boost::mutex::scoped_lock lock(mMutex);

    while (mInputQueue.empty())
        mInputQueueNotEmpty.wait(lock);

    // Do something ...
}
Run Code Online (Sandbox Code Playgroud)

我跟踪了代码,发现basic_timed_mutex类中有一个变量active_count,每当发生运行时错误时,该变量都是未初始化的.运行时错误发生在这里:

bool try_lock()
{
    return !win32::interlocked_bit_test_and_set(&active_count,lock_flag_bit);
}
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么办!因为我无权访问此变量,我不负责初始化它.

UPDATE

我的功能类是这样的:

#pragma once

#include <vector.h>
#include <boost/thread.hpp>
#include "MyThread.h"
#include <queue>
#include <boost/thread/condition.hpp>

template <class Job, class JobOutput>
class MyThreadPool
{
public:
    MyThreadPool(int processJobWhenArrived);        
    virtual ~MyThreadPool(void);
        void    Initialize(int ThreadsCount);
        void    AddJob(Job* job);
        void    StartProcess();
        Job*    GetNextJob();
    virtual void    FinishJob(Job* job, JobOutput* jobOutput);
        void    WaitUntilAllJobsProcessed();

public:
    vector<MyThread<Job, JobOutput>*> mThreads; …
Run Code Online (Sandbox Code Playgroud)

c++ boost mutex locking boost-thread

6
推荐指数
1
解决办法
2072
查看次数

标签 统计

boost ×1

boost-thread ×1

c++ ×1

locking ×1

mutex ×1