我需要一个提升线程来报告成功或失败。我目前通过将指针传递给bool来实现它。它大部分时间都有效,但偶尔会抛出一次访问冲突错误。
传递指针以返回线程函数的成功或失败是否有任何问题?还有其他办法吗?
BR
Niladri
答案 0 :(得分:3)
您可以使用future。您可以将未来视为线程之间的共享值。一个线程将写入未来的值,另一个线程将读取它。如果尚未编写未来,则读取线程将阻塞,直到它具有。期货已经成为boost.threads的一部分。
答案 1 :(得分:1)
我们无法告诉您代码有什么问题,因为您没有发布任何代码,但是如果您传入指向线程函数的指针并将线程分配给它,则需要确保该内存在整个线程期间保持有效。
答案 2 :(得分:0)
最简单的说,您可能只需要将boolean包装在类/结构中,并使用互斥锁保护对它的访问,但我不确定访问冲突是否来自两个尝试读取和写入的线程同时:
struct saferBool
{
void setSuccessState ( bool b );
bool wasSuccessful ();
private:
bool successState;
boost::interprocess::interprocess_mutex mutex;
};
void saferBool::setSuccessState ( bool b )
{
mutex.lock();
successState = b;
mutex.unlock();
}
bool saferBool::wasSuccess ()
{
bool b;
mutex.lock();
b = successState;
mutex.unlock();
return b;
}
否则,也许你无意中更改了指向的地址,或者你指向的本地线程中的离开范围的布尔值,使其地址对于第二个线程的写入无效。