2014-09-25 31 views
0

我有兩個功能,Funct1Funct2。他們都在內部呼叫Funct3Funct 1和Funct2由2個不同的線程調用。鎖定由不同線程執行的多個功能

我想要的是,當Funct1正在進行由Thread1,然後Func2不應該被稱爲Thread2,或基本上Funct3不應該在同一時間兩個線程調用。

如果我在Funct1Funct2中使用互斥量,並且Funct1的執行開始,那麼這個互斥鎖是否會禁止Funct2啓動?

在這種情況下應該做什麼?下面是示例代碼:

class A 
{ 
boost::mutex mtx; 
public: 
     void Func1() 
     { 
      boost::mutex::scoped_lock lock(this->mtx); 
      /* -------- */ 
      Func3(); 
     } 
     void Func2() 
     { 
      boost::mutex::scoped_lock lock(this->mtx); 
      /* --------- */ 
      Func3(); 
     } 
     void Func3() 
     { 
      //do something 
     } 
    }; 
+0

互斥量僅在代碼塊由多個線程訪問(執行)時纔有意義。就你而言,似乎Func3是由兩個線程執行的唯一地方。你爲什麼不在Func3中插入'lock'? – 9dan 2014-09-25 06:35:17

+0

不,Func1也由10個線程執行,並且Func2在另一個線程中運行。 – garima721 2014-09-25 07:44:35

回答

0

如果FUNC1()可以從多個線程調用並平行只要FUNC2運行自由未運行和FUNC2()可以在沒有FUNC1()不然後只運行運行你可能需要一個共享鎖。 Func1應該在運行之前獲得共享鎖定,而Func2應該在運行之前獲得獨佔鎖定。這是經典的許多讀者,一個作家的問題。