C++ boost::bind在多线程进程中未按预期工作

C++ boost::bind在多线程进程中未按预期工作,c++,boost,boost-thread,boost-bind,C++,Boost,Boost Thread,Boost Bind,以下函数由多个线程同时调用 handlework(ItemWork &itemWork) { ItemHandler *itemHandler = NULL; itemHandler = new ItemHandler (); itemWork.work(boost::protect(boost::bind(&ItemHandler::writer, itemHandler, _1, _2, _3))); . . . } 当它们由多个线程同时执行时

以下函数由多个线程同时调用

handlework(ItemWork &itemWork)
{
    ItemHandler *itemHandler = NULL;
    itemHandler  = new ItemHandler ();
    itemWork.work(boost::protect(boost::bind(&ItemHandler::writer, itemHandler,  _1,  _2, _3)));
.
.
.
}
当它们由多个线程同时执行时,由最新线程创建的itemHandler对象将由其他先前启动(仍在运行)的线程使用

如何避免这种情况?我的意思是,每个线程在执行绑定函数时都应该使用自己的对象

如果你需要更多信息,请告诉我

谢谢,
Naga

是否将itemHandler保存在itemWork对象中并从那里调用它?在这种情况下,以前的作业将被覆盖。如果改为在函数.work中使用itemHandler,则它应该使用特定于线程的函数。无论如何,itemwork.work的内容将是有用的信息。谢谢。itemHandler不是itemWork中的成员变量。但是传递给创建itemHandler对象的参数是itemWork的成员变量。这是一个问题吗?
ItemHandler::writer
的什么签名?请将其设为(这是一个问题,除非您有
itemWork
的每个任务实例)uint64_t ItemHandler::writer(uint8_t*缓冲区,uint64_t缓冲区大小,uint64_t偏移量){uint64_t returnBufferSize=0;m_偏移量。推回(偏移量);尝试{if(m_-disk)-->此m_-disk是ItemWork.openDisk()的成员变量;-->失败,因为它正在打开其他线程磁盘…}