是不是C++ 0x没有信号量?Stack Overflow上已经有一些关于信号量使用的问题.我一直使用它们(posix信号量)让线程等待另一个线程中的某个事件:
void thread0(...)
{
doSomething0();
event1.wait();
...
}
void thread1(...)
{
doSomething1();
event1.post();
...
}
Run Code Online (Sandbox Code Playgroud)
如果我用互斥量做到这一点:
void thread0(...)
{
doSomething0();
event1.lock(); event1.unlock();
...
}
void thread1(...)
{
event1.lock();
doSomethingth1();
event1.unlock();
...
}
Run Code Online (Sandbox Code Playgroud)
问题:它很难看并且不能保证thread1首先锁定互斥锁(假设同一个线程应该锁定和解锁互斥锁,你也无法在thread0和thread1启动之前锁定event1).
因此,由于boost也没有信号量,实现上述目标的最简单方法是什么?
我有一个方法,它在另一个线程上执行,然后在主线程上执行。如果完成,它会调用回调。但主线程必须等待,否则它会销毁回调想要返回的对象。
现在,为了简单起见,我有以下代码:
int main()
{
Something* s = new Something();
s.DoStuff(); // Executed on another thread
delete (s); // Has to wait for DoStuffCallback() to be executed
}
void Something::DoStuff()
{
// Does stuff
// If done, calls its callback
}
void Something::DoStuffCallback()
{
// DoStuff has finished work
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能等到 DoStuffCallback() 执行然后继续主线程?
多谢!
编辑:
这对我不起作用,因为我无法访问正确的编译器。(我已经提到VS2010)