Qt 4

През цялата документация условията на циркулационните и конец-безопасно се използва за означаване на класове и функции, за да покаже как те могат да бъдат използвани в многонишкови приложения:

  • Тема-безопасна функция може да се нарече едновременно от множество нишки, дори когато разговорите използват споделените данни, тъй като всички достъп до споделени данни в ред.
  • Функция входящ може да се нарече едновременно от множество нишки, но само ако всяко повикване използва свои собствени данни.

Така функция нишка-безопасно е винаги входящ. но не винаги входящ функция нишка безопасно.

В по-широк смисъл, на класа се нарича входящ. ако функциите на страните могат безопасно да бъдат наречени от множество нишки, толкова дълго, колкото всяка нишка използва своя отделна инстанция на класа. Класът е нишка-безопасно. ако функциите на страните могат безопасно да бъдат наречени от множество нишки, дори и ако всички нишки споделят една и съща инстанция на класа.

Забележка: Qt класове документирани като конец-безопасно. само ако те са проектирани да работят в многонишковите приложения. Ако функцията не е маркиран като конец-безопасно или входящ, тя не трябва да се използва в различни теми. Ако класът не е маркирана като конец-безопасно или входящ, а след това с конкретен пример за един клас, не трябва да има достъп от различни нишки.

входящ

C ++ класове често са входящ, просто защото те имат достъп само до данните на своите членове. Всяка нишка може да се обадите на член функция входящ инстанция на класа, а не друга нишка не може да се обадите на член функция на една и съща инстанция на клас в същото време. Например, класът на Counter-долу е входящ:

Този клас не е конец-безопасно, защото ако множество нишки се опитват да променят член данни п. резултатът не е дефинирано. Това е така, тъй като операторите ++ и - не е задължително да са атомни. В действителност, те обикновено се разшири до три машинни инструкции:

  1. Зареждане на променлива стойност в регистъра.
  2. Увеличаването или намаляването на стойността на регистър.
  3. Запиши се регистрирате стойност обратно към основната памет.

Потоци А и В в същото време може да изтеглите стари стойността на променливата, увеличаване на стойността му в регистъра и да запазите стойността на променливата в паметта, но променливата ще бъде увеличен само веднъж!

нишка

А поток трябва да изпълнява стъпки 1, 2, 3, без прекъсване (атомно) преди резба B може да изпълнява същите стъпки; или обратно. Най-лесният начин да се направи клас нишка е да защитава всякакъв достъп до членовете на данни с QMutex:

QMutexLocker клас автоматично заключва мутекс в своя конструктор и го отключва, когато се извиква деструктора в края на функцията. Заключване на мутекс гарантира, че лечението на различните потоци ще се нареди. член данни мутекс обявен за непостоянен. тъй като ви позволява да заключите и отключите мутекс в стойността на функцията (). която е константа.

Бележки по класове Qt

Повечето класове Qt са циркулационните. но не и конци-безопасно. тъй като такова изпълнение ще изисква допълнителни разходи за повторен заключване и отключване QMutex. Например, QString е входящ, но не и конец в безопасност. Можете лесно да получите достъп до редица случаи на QString от множество нишки в същото време, но не можете лесно да получите достъп до една и съща инстанция на QString от множество нишки в същото време (ако се не осигурява защита срещу достъп чрез QMutex).

Някои класове и Qt нишка безопасно функция. Това е свързано основно към класа на потоци (например, QMutex) и основните функции (например QCoreApplication :: postEvent ()).

Забележка: терминологията в областта на многонишкова все още не е напълно стандартизирана. POSIX използва малко по-различна дефиниция на reentrancy и конец за API C. При използване на други обектно-ориентиран C ++ клас библиотека във връзка с Qt се уверете, че техните определения са ясни.

Всички други търговски марки са собственост на съответните им собственици. Декларация за поверителност

Притежатели на лиценз, притежаващи валидни разрешителни за стопански на Qt, могат да използват този документ в съответствие с договореностите от търговски лиценз Qt, предоставени със софтуера, или, като алтернатива, в съответствие с условията, които се съдържат в писмено споразумение между Вас и Nokia.

Опит за превод на Qt документация.
Ако искате да се присъедините, или ако имате коментари или предложения, след това отидете на форума: Превод Qt документация на български език.
Хората, които са допринесли за превода: Екипът на преводачи