Wiele wątków i deadlock w QT

Odpowiedz Nowy wątek
2011-08-02 23:57
taki jeden
0

Mam następujący problem

jest sobie jakiś kontener - mapa, lista, nieważne - no i próbuję się do niego "dobrać" w wątku

przed operacją ustawiam mutexa, ale to powoduje komunikat nastepującej treści

QMutex::lock: Deadlock detected in thread 0x1468

próbowałem z tryLock -ale to wtedy tak jakoś dziwnie działało - więc zrozumiałem, że nie tędy droga

poszukałem po sieci, znalazłem, że w takich przypadkach przydają się semafory, ale tu się zaczynają schody

przykłady jakieś są - ale ja ich nie rozumiem

np
http://cartan.cas.suffolk.edu[...]emaphores-semaphores-cpp.html

czemu sa tam takie a nie inne wartości - skąd mają być te wartości przy semaforach

np
QSemaphore::QSemaphore ( int n = 0 )
Creates a new semaphore and initializes the number of resources it guards to n (by default, 0).

co to są te zasoby?

jak mam np jeden kontener do które próbuję coś pisać/czytać w watkach to daje tam jeden?

mam prośbę o jakiś konkret

//np mam listę
 
QList<QString> lista;
 
//lub mapę
 
QMap<int, QString> mapa;
 
//mam metody do zapisu i odczytu
 
void zapisz(int klucz, Qstring wartość)
{
   mapa[klucz] = wartość;
}
 
Qstring odczyt(int klucz)
{
   if(mapa.contains(klucz))
     return mapa[klucz];
  return "";
}
 
//i co powinienem wpisać, jak powinienem zapisać te metody, aby nie było deadlocka?
 

z góry dziękuję za pomoc

Pozostało 580 znaków

2011-08-03 09:19
0
QMutex mutex;
 
...
 
void zapisz(int klucz, Qstring wartość)
{
    QMutexLocker locker(&mutex);
    mapa[klucz] = wartość;
}
 
Qstring odczyt(int klucz)
{
    QMutexLocker locker(&mutex);
 
    if(mapa.contains(klucz))
        return mapa[klucz];
    return "";
}

Pozostało 580 znaków

2011-08-03 11:33
taki jeden
0

dziękuję bardzo za odpowiedź

przyczyną była moja głupota - czyli błąd projektowy, logiczny, czy jak tam to zwać - poczytałem, poszukałem, posprawdzałem
potem przemyślałem rzecz raz jeszcze i jest już dobrze

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0