Search code examples
multithreadingqtthreadpoolrunnableqnetworkaccessmanager

QNetworkAccessManager from ThreadPool


A very fundamental question. The documentation mentions that all methods in QNetworkAccessManager are reentrant. If so, is performing a get() method in a QRunnable without locks legal? My code would look something like this:

class MyClass: public QRunnable
{
    void run()
    {
        ...
        QNetworkAccessManager nam;
        QNetworkReply* reply =  name.get(request)    // No Read-write lock.
        ...
    }
};

Solution

  • From the Qt documentation:

    [...] a class is said to be reentrant if its member functions can [simultaneously] be called safely from multiple threads, as long as each thread uses a different instance of the class.

    Since you're using a different instance each time (the one you create on the stack in run()), you're on the safe side.