М
МишаNov. 15, 2017, 9:03 a.m.

Многопоточность

QThread

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

Одна из функций обрабатывает массивы и постоянно изменяет переменные, записанные в хедере. Переменные изменяются другими функциями. В хедере записано, т.к. к этим переменным постоянно обращаются различные функции.
Обработка массивов требует большой вычислительной мощности, потому нужно сделать многопоточность.
Если сделать многопоточность в данной функции, то разные потоки будут обращаться к недочитанным переменным в хедер и результаты расчетов будут ошибочными.
Скажите пожалуйста, как логичней подойти к вопросу многопоточности?
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

4
Evgenii Legotckoi
  • Nov. 15, 2017, 9:19 a.m.

День добрый!

Для этого можно использовать мюьтексы, они не дадут работать с данными, пока не отработает метод в потоке.
Сам мьютекс объявить в стеке классе.
class SomeClass : public QObject
{
public:
    void someMethod();

private:
    QMutex m_mutex;
};
А потом использовать его в начале метода, который работает в потоке с помощью QMutexLocker
void someMethod()
{
    QMutexLocker(&m_mutex);

    ...
}
Мьютекс не позволит обращаться к данным из других потоков, пока не закончится работа.
    М
    • Nov. 15, 2017, 10 a.m.

    Но в таком случае пропадет смысл многопоточности. Многопоточность нужна для одновременной обработки массивов. Для этого нужны переменные, записанные в хедере.

    Видимо нужно создавать в функции дублеры переменных, записанных в хедере.
    Я могу сделать функцию getParametr(), возвращающих одновременно переменные а1,а2,а3 не в хедер, а в функцию. Скажите пожалуйста, как принять одновременно а1,а2,а3 в функцию? Как правильно создать объект?
      М
      • Nov. 15, 2017, 10:10 a.m.

      Может быть есть способ сохранять для каждого потока свои переменные в хедере?

        Evgenii Legotckoi
        • Nov. 15, 2017, 10:15 a.m.
        • (edited)

        Одновременно с одной переменной может работать только один поток. Если речь не идёт о записи данных в переменную, а только о доступе к ней, то ничего страшного не произойдёт, проблемы будут возникать при конкурентном доступе в разделяемому ресурсу (переменной) с целью его изменения. Если у вас существует только один экземпляр переменной, то бредовой будет идея делать несколько функций для каждого потока, которая возвратит одну и ту же переменную. Чтобы вы ни говорили о том, что идея многопоточности теряется, в данном случае вы не правы. Если у вас всего одна единственная переменная или массив, то не в коем случае нельзя давать возможность другим потокам работать с переменной, если один поток уже с ней работает.


        Вот если Вы в отдельные потоки вынесете обработку логики перед записью итоговых данных. Вот это уже другой вопрос. То есть делаете подготовку данных, а запись уже ведёте с использованием мюьтекса.

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          AD

          C ++ - Test 004. Pointers, Arrays and Loops

          • Result:50points,
          • Rating points-4
          m

          C ++ - Test 004. Pointers, Arrays and Loops

          • Result:80points,
          • Rating points4
          m

          C ++ - Test 004. Pointers, Arrays and Loops

          • Result:20points,
          • Rating points-10
          Last comments
          i
          innorwallNov. 13, 2024, 11:03 p.m.
          How to make game using Qt - Lesson 3. Interaction with other objects what is priligy tablets What happens during the LASIK surgery process
          i
          innorwallNov. 13, 2024, 8:09 p.m.
          Using variables declared in CMakeLists.txt inside C ++ files where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
          i
          innorwallNov. 11, 2024, 10:12 p.m.
          Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
          i
          innorwallNov. 11, 2024, 6:23 p.m.
          QML - Tutorial 035. Using enumerations in QML without C ++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
          i
          innorwallNov. 11, 2024, 3:50 p.m.
          Qt/C++ - Lesson 052. Customization Qt Audio player in the style of AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
          Now discuss on the forum
          i
          innorwallNov. 14, 2024, 12:39 a.m.
          добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
          i
          innorwallNov. 11, 2024, 10:55 a.m.
          Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
          9
          9AnonimOct. 25, 2024, 9:10 a.m.
          Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

          Follow us in social networks