2013-06-11 52 views
0

这是正确的方式同步线程没有互斥。 此代码应该运行很长一段时间这是正确的方式线程同步出互斥

#include <boost/thread.hpp> 
#include <boost/thread/mutex.hpp> 
#include <boost/memory_order.hpp> 
#include <atomic> 

std::atomic<long> x =0; 
std::atomic<long> y =0; 

boost::mutex m1; 

// Thread increments 
void Thread_Func() 
{ 
    for(;;) 
    { 
//  boost::mutex::scoped_lock lx(m1); 
     ++x; 
     ++y; 
    } 
} 

// Checker Thread 
void Thread_Func_X() 
{ 
    for(;;) 
    { 
//  boost::mutex::scoped_lock lx(m1); 
     if(y > x) 
     { 
// should never hit until int overflows 
      std::cout << y << "\\" << x << std::endl; 
      break; 
     } 
    } 
} 

//Test Application 
int main(int argc, char* argv[]) 
{ 
    boost::thread_group threads; 
    threads.create_thread(Thread_Func); 
    threads.create_thread(Thread_Func_X); 
    threads.join_all(); 
    return 0; 
} 

回答

0

不知道正是你想做什么,很难说这是“正确”的方式。这是有效的代码,虽然有点令人生气。

不能保证“Checker”线程将会看到条件y > x。它在理论上可能永远不会中断。实际上,它会在某个时候触发,但x可能不是LONG_MIN和y LONG_MAX。换句话说,不能保证只在溢出发生时触发。