У меня есть две функции: Funct1
и Funct2
. Они оба внутренне звонят Funct3
. Funct
1 и Funct2
вызывается двумя разными потоками.Заблокировать несколько функций, выполняемых различными потоками
То, что я хочу, когда Funct1
находится в процессе по Thread1
, то Func2
не должен вызываться Thread2
, или в основном Funct3
не следует называть обеими нитями одновременно.
Если я использую семафор в обоих Funct1
и Funct2
, и исполнение 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
}
};
Мьютексы имеют смысл только в том случае, если кодовый блок, доступ к которому выполняется (выполняется) более чем одним потоком. В вашем случае кажется, что Func3 - это единственное место, которое выполняется обоими потоками. Почему вы не вставляете 'lock' в Func3? – 9dan
Нет, Func1 также выполняется 10 потоками, а Func2 работает в другом потоке. – garima721