2014-01-08 98 views
3

在C#/ Java中,我可以很容易地使任何線程不安全的代碼是線程安全的。我只是特推出「lockObj」,並使用它像:C#模擬C#/ Java鎖(對象)

private object lockObj = new object(); 

    void ThreadSafeMethod() 
    { 
     lock (lockObj) 
     { 
      // work with thread-unsafe code 
     } 
    } 

(有些人只是用lock (this)但這是not recomended

什麼是最簡單和最快的C++相同呢?我可以使用C++ 11。

回答

3

如果你可以使用C++ 11,用std ::互斥體(如果你不能使用C++ 11,使用升壓::互斥)

private: 
    std::mutex m; 

    void ThreadSafeMethod() 
    { 
     std::lock_guard<std::mutex> lock(m); 
     // work with thread-unsafe code 
    } 
0

Mutex可能是最接近本機的C++等價物。對於包括使用外部庫的最接近的等價物,您需要一臺監視器。

然而,std::lock可能是最直的線(所提供的代碼示例使用std::mutex)。

0

您可以使用std::lock如果你有一個C++編譯器或由您的操作系統提供的標準原語,例如:Windows上的WaitForSingleObject或Unix/Linux上的pthread_mutex_lock。