OVH Cloud OVH Cloud

thread safe

9 réponses
Avatar
Jean-François GAZET
Bonjour,

comment déclarer une variable "thread safe" ? quel est le principe ?

Merci.

9 réponses

Avatar
Manuel Leclerc
Jean-François GAZET a écrit :

comment déclarer une variable "thread safe" ?


^^^^^^^^^^^^^^^^^^^^^^

C'est quoi ?
Avatar
Thierry
Bonjour,

Jean-François GAZET a écrit :

Bonjour,

comment déclarer une variable "thread safe" ? quel est le principe ?



Pas de declaration particuliere, faut juste utiliser les mecanismes
adequats pour garantir l'integrité de la donnée vis a vis des acces
concurrents des differents threads.
(cf CriticalSection).

--
"MOI JE VEUX JOUER DE L'HELICON (PON PON PON PON)"
Avatar
Jean-François GAZET
> > Bonjour,
> comment déclarer une variable "thread safe" ? quel est le principe ?



Pas de declaration particuliere, faut juste utiliser les mecanismes
adequats pour garantir l'integrité de la donnée vis a vis des acces
concurrents des differents threads.
(cf CriticalSection).



Merci.
Vous avez des liens sur ce sujet ? même en anglais ?
Car google me sort trop de sites avec "CriticalSection" et je ne suis pas
sur qu'ils traitent tous de ce problème.
Avatar
Thierry
Bonjour,

Jean-François GAZET a écrit :

Merci.
Vous avez des liens sur ce sujet ? même en anglais ?
Car google me sort trop de sites avec "CriticalSection" et je ne suis pas
sur qu'ils traitent tous de ce problème.



http://msdn.microsoft.com/

--
"MOI JE VEUX JOUER DE L'HELICON (PON PON PON PON)"
Avatar
Arnaud Debaene
Jean-François GAZET wrote:
Bonjour,
comment déclarer une variable "thread safe" ? quel est le principe ?





Pas de declaration particuliere, faut juste utiliser les mecanismes
adequats pour garantir l'integrité de la donnée vis a vis des acces
concurrents des differents threads.
(cf CriticalSection).



Merci.
Vous avez des liens sur ce sujet ? même en anglais ?
Car google me sort trop de sites avec "CriticalSection" et je ne suis
pas sur qu'ils traitent tous de ce problème.



Logiquement, si, il traitent bien du problème (c'est la fonction d'eun
section critique de synchroniser les accès concurrents à une variable).

Arnaud
Avatar
Christophe Lephay
Manuel Leclerc wrote:
Jean-François GAZET a écrit :

comment déclarer une variable "thread safe" ?


^^^^^^^^^^^^^^^^^^^^^^

C'est quoi ?



Une variable qui ne va pas se trouver dans un état indéterminé suite à des
accès concurrents...

Chris
Avatar
Christophe Lephay
Thierry wrote:
Bonjour,

Jean-François GAZET a écrit :

Bonjour,

comment déclarer une variable "thread safe" ? quel est le principe ?



Pas de declaration particuliere, faut juste utiliser les mecanismes
adequats pour garantir l'integrité de la donnée vis a vis des acces
concurrents des differents threads.
(cf CriticalSection).



Au choix, des sections critiques ou des mutex (mutual exclusion).
L'inconvénient des sections critiques sur les mutex, c'est qu'elles se
bloquent mutuellement même si elles n'accèdent pas aux mêmes ressources. Par
exemple si tu as deux threads accédant à une variable commune et deux autres
accédant à un fichier commun, un seul des quatre thread ne sera exécuté à
chaque instant alors que deux le seront avec des mutex.

Chris
Avatar
Arnaud Debaene
Christophe Lephay wrote:

Au choix, des sections critiques ou des mutex (mutual exclusion).
L'inconvénient des sections critiques sur les mutex, c'est qu'elles se
bloquent mutuellement même si elles n'accèdent pas aux mêmes
ressources. Par exemple si tu as deux threads accédant à une variable
commune et deux autres accédant à un fichier commun, un seul des
quatre thread ne sera exécuté à chaque instant alors que deux le
seront avec des mutex.




Mais qu'est ce que tu racontes là? Dans les 2 cas, il s'agit d'utiliser un
objet de synchronisation par objet à synchroniser, c'est tout.

Les seules différences entre mutex et sections critiques sont :
- un mutex peut être partagé entre plusieurs processus.
- les threads en attente d'un mutex sont dans une file d'attente FIFO. Avec
une section critique, le prochain thread a obtenir la section critique n'est
pas prédictible.
- les sections critiques sont plus légères (pas d'objet noyau) et plus
rapides à acquérir / relacher.

Arnaud
Avatar
manuelleclerc
Christophe Lephay a écrit :

Manuel Leclerc wrote:

> Jean-François GAZET a écrit :
>
> > comment déclarer une variable "thread safe" ?
> ^^^^^^^^^^^^^^^^^^^^^^
> C'est quoi ?

Une variable qui ne va pas se trouver dans un état
indéterminé suite à des accès concurrents...



Je posais la question pour que l'OP précise son problème.
Il me semble impossible de lui répondre avec si peu
d'information, en particulier à cause du verbe "déclarer"
dans sa question.

On pourrait par exemple imaginer qu'il souhaite avoir une
instance de sa variable par thread. Si c'est la cas, voir
le concept de Thread Local Storage.

Api Win32 : TlsAlloc, TlsFree, TlsGetValue, TlsSetValue
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/tlsalloc.asp

Extension Microsoft au langage C
Storage-class attribute : __declspec(thread)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/decla_44.asp

Corrigez moi si je me trompe, mais aucun rapport avec les Mutex et
les sections critiques, dans ce cas.

D'où ma question...

--
<Mooby> la résolution de l'année 202
<Mooby> * plus de fautes de frappes