我使用的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)