Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2015, 16:22   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос Вопрос по мютексам

Здравствуйте.

Есть сервер на котором один слушающий и два рабочих потока. Мне не совсем понятно как работают мютексы.

Например есть в рабочем потоке массив классов classA[20]. В рабочий поток передаётся id класса в котором нужно запустить функцию например Func().

Рабочий поток такой
Код:
for(;;)
{
    //Пока очередь пуста ожидаем
    if(!TCPQueue.empty())
    {
        int id = TCPQueue.front();
        classA[id].Func();
    }
}
Два примера:

Так будет быстрее
Код:
(1)
//Мютексы ставлю внутри класса в функции Func
void CLA::Func()
{
    pthread_mutex_lock(&QueueMutex);
    .........
    pthread_mutex_unlock(&QueueMutex);
}
чем так
Код:
(2)
    //Мютексы ставлю в цикле рабочего потока
    pthread_mutex_lock(&QueueMutex);
    classA[id].Func();
    pthread_mutex_unlock(&QueueMutex);
?

К примеру в очереди TCPQueue - 2 элемента
id = 0; и id = 1;

Если я использую код как в примере (2), то второй поток будет приостановлен пока в первом потоке не завершится функция Func.

Если будет использован код из примера (1), то так как переменные id разные, то оба рабочих потока будут работать одновременно.

Я правильно понял?
gunsoy вне форума Ответить с цитированием
Старый 20.10.2015, 17:25   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Все зависит от QueueMutex, но он здесь не указан, так что ваш вопрос не имеет ответа.

Насчет того, как работают мьютексы - два потока НЕ могут пройти через ОДИН мьютекс ОДНОВРЕМЕННО.
waleri вне форума Ответить с цитированием
Старый 21.10.2015, 17:00   #3
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Цитата:
Насчет того, как работают мьютексы - два потока НЕ могут пройти через ОДИН мьютекс ОДНОВРЕМЕННО.
Теперь мне стало понятно как это работает. Спасибо за помощь
gunsoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос ser70 Общие вопросы C/C++ 1 15.11.2012 22:46
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
вопрос Exo Microsoft Office Excel 2 04.12.2008 17:07
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10