Are local variables in static member functions thread safe?
-
wrote on 13 Aug 2019, 16:33 last edited by PowerNow
Hi,
here the following shema.class { ... static funct1() { uses local variables and Qt functions; funct2(); } static funct2() { uses local variables & Qt functions; } funct3() { .... QFuture<bool> qf = QtConcurrent::mapped(array, funct1); } }
The code works correctly, but I'm still not sure if I have to make funct2() thread safe? As long I'm not using global and static varibles it should be correct. But what's also about the Qt functions?
Thxs
-
@powernow said in Are local variables in static member functions thread safe?:
Are local variables in a static member function stored in a separate stack for each call from a thread like for local variables in normal member functions?
Yes.
If yes then also komplexe objects should be thread safe?
As I said, not necessarily.
Were do I check if a QT function ist thread safe?
In the documentation?!
wrote on 14 Aug 2019, 08:19 last edited by@aha_1980 "Many Qt classes are reentrant, but they are not made thread-safe", so if I not use shared data (reentrant) in static member functions it works. The main point is that threads also for static member functions uses their own stack. Thxs!
-
Hi,
here the following shema.class { ... static funct1() { uses local variables and Qt functions; funct2(); } static funct2() { uses local variables & Qt functions; } funct3() { .... QFuture<bool> qf = QtConcurrent::mapped(array, funct1); } }
The code works correctly, but I'm still not sure if I have to make funct2() thread safe? As long I'm not using global and static varibles it should be correct. But what's also about the Qt functions?
Thxs
wrote on 13 Aug 2019, 17:49 last edited byProbably you have to check with the functions you are using. It should be in the documentation of the functions you are using. At least I have stumbled a couple of times over the thread savety declaration in the documents. I doubt that anybody can give otherwise a general statement for all functions.
-
Hi,
here the following shema.class { ... static funct1() { uses local variables and Qt functions; funct2(); } static funct2() { uses local variables & Qt functions; } funct3() { .... QFuture<bool> qf = QtConcurrent::mapped(array, funct1); } }
The code works correctly, but I'm still not sure if I have to make funct2() thread safe? As long I'm not using global and static varibles it should be correct. But what's also about the Qt functions?
Thxs
Local variables of POD (plain old data) types, like
int
,bool
,float
are most likely thread-safe.If you have classes as local variables, then it depends if these access other global memory.
As @koahnig already said, it will be hard to give a general advice without a specific example.
Regards
-
wrote on 13 Aug 2019, 20:30 last edited by
Are local variables in a static member function stored in a separate stack for each call from a thread like for local variables in normal member functions? If yes then also komplexe objects should be thread safe? Were do I check if a QT function ist thread safe? Thxs...
-
Are local variables in a static member function stored in a separate stack for each call from a thread like for local variables in normal member functions? If yes then also komplexe objects should be thread safe? Were do I check if a QT function ist thread safe? Thxs...
@powernow said in Are local variables in static member functions thread safe?:
Are local variables in a static member function stored in a separate stack for each call from a thread like for local variables in normal member functions?
Yes.
If yes then also komplexe objects should be thread safe?
As I said, not necessarily.
Were do I check if a QT function ist thread safe?
In the documentation?!
-
@powernow said in Are local variables in static member functions thread safe?:
Are local variables in a static member function stored in a separate stack for each call from a thread like for local variables in normal member functions?
Yes.
If yes then also komplexe objects should be thread safe?
As I said, not necessarily.
Were do I check if a QT function ist thread safe?
In the documentation?!
wrote on 14 Aug 2019, 08:19 last edited by@aha_1980 "Many Qt classes are reentrant, but they are not made thread-safe", so if I not use shared data (reentrant) in static member functions it works. The main point is that threads also for static member functions uses their own stack. Thxs!
-
@aha_1980 "Many Qt classes are reentrant, but they are not made thread-safe", so if I not use shared data (reentrant) in static member functions it works. The main point is that threads also for static member functions uses their own stack. Thxs!
wrote on 14 Aug 2019, 11:07 last edited by@powernow said in Are local variables in static member functions thread safe?:
@aha_1980 "Many Qt classes are reentrant, but they are not made thread-safe", so if I not use shared data (reentrant) in static member functions it works. The main point is that threads also for static member functions uses their own stack. Thxs!
That is the Qt definition you can rely on https://doc.qt.io/qt-5/threads-reentrancy.html
1/7