MagickCore 7.0.10
thread.c
Go to the documentation of this file.
1/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3% %
4% %
5% TTTTT H H RRRR EEEEE AAA DDDD %
6% T H H R R E A A D D %
7% T HHHHH RRRR EEE AAAAA D D %
8% T H H R R E A A D D %
9% T H H R R EEEEE A A DDDD %
10% %
11% %
12% WizardCore Thread Methods %
13% %
14% Software Design %
15% Cristy %
16% March 2003 %
17% %
18% %
19% Copyright @ 1999 ImageMagick Studio LLC, a non-profit organization %
20% dedicated to making software imaging solutions freely available. %
21% %
22% You may not use this file except in compliance with the License. You may %
23% obtain a copy of the License at %
24% %
25% https://imagemagick.org/script/license.php %
26% %
27% Unless required by applicable law or agreed to in writing, software %
28% distributed under the License is distributed on an "AS IS" BASIS, %
29% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
30% See the License for the specific language governing permissions and %
31% limitations under the License. %
32% %
33%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34%
35%
36*/
37
38/*
39 Include declarations.
40*/
41#include "wizard/studio.h"
42#include "wizard/memory_.h"
43#include "wizard/thread_.h"
45
46/*
47%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48% %
49% %
50% %
51% M a g i c k C r e a t e T h r e a d K e y %
52% %
53% %
54% %
55%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56%
57% WizardCreateThreadKey() creates a thread key and returns it.
58%
59% The format of the WizardCreateThreadKey method is:
60%
61% WizardThreadKey WizardCreateThreadKey(WizardThreadKey *key)
62%
63*/
65{
66#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
67 return(pthread_key_create(key,NULL) == 0 ? WizardTrue : WizardFalse);
68#elif defined(MAGICKORE_HAVE_WINTHREADS)
69 *key=TlsAlloc();
70 return(*key != TLS_OUT_OF_INDEXES ? WizardTrue : WizardFalse);
71#else
72 *key=AcquireWizardMemory(sizeof(key));
73 return(*key != (void *) NULL ? WizardTrue : WizardFalse);
74#endif
75}
76
77/*
78%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79% %
80% %
81% %
82% M a g i c k D e l e t e T h r e a d K e y %
83% %
84% %
85% %
86%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87%
88% WizardDeleteThreadKey() deletes a thread key.
89%
90% The format of the AcquireAESInfo method is:
91%
92% WizardBooleanType WizardDeleteThreadKey(WizardThreadKey key)
93%
94% A description of each parameter follows:
95%
96% o key: the thread key.
97%
98*/
100{
101#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
102 return(pthread_key_delete(key) == 0 ? WizardTrue : WizardFalse);
103#elif defined(MAGICKORE_HAVE_WINTHREADS)
104 return(TlsFree(key) != 0 ? WizardTrue : WizardFalse);
105#else
107 return(WizardTrue);
108#endif
109
110}
111
112/*
113%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114% %
115% %
116% %
117% M a g i c k G e t T h r e a d V a l u e %
118% %
119% %
120% %
121%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
122%
123% WizardGetThreadValue() returns a value associated with the thread key.
124%
125% The format of the WizardGetThreadValue method is:
126%
127% void *WizardGetThreadValue(WizardThreadKey key)
128%
129% A description of each parameter follows:
130%
131% o key: the thread key.
132%
133*/
135{
136#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
137 return(pthread_getspecific(key));
138#elif defined(MAGICKORE_HAVE_WINTHREADS)
139 return(TlsGetValue(key));
140#else
141 return((void *) (*key));
142#endif
143}
144
145/*
146%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
147% %
148% %
149% %
150% M a g i c k S e t T h r e a d V a l u e %
151% %
152% %
153% %
154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
155%
156% WizardSetThreadValue() associates a value with the thread key.
157%
158% The format of the WizardSetThreadValue method is:
159%
160% WizardBooleanType WizardSetThreadValue(WizardThreadKey key,
161% const void *value)
162%
163% A description of each parameter follows:
164%
165% o key: the thread key.
166%
167% o value: the value
168%
169*/
171 const void *value)
172{
173#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
174 return(pthread_setspecific(key,value) == 0 ? WizardTrue : WizardFalse);
175#elif defined(MAGICKORE_HAVE_WINTHREADS)
176 return(TlsSetValue(key,(void *) value) != 0 ? WizardTrue : WizardFalse);
177#else
178 *key=(size_t) value;
179 return(WizardTrue);
180#endif
181}
WizardExport void * AcquireWizardMemory(const size_t size)
Definition memory.c:586
WizardExport void * RelinquishWizardMemory(void *memory)
Definition memory.c:1039
#define WizardExport
WizardExport WizardBooleanType WizardSetThreadValue(WizardThreadKey key, const void *value)
Definition thread.c:170
WizardExport void * WizardGetThreadValue(WizardThreadKey key)
Definition thread.c:134
WizardExport WizardBooleanType WizardCreateThreadKey(WizardThreadKey *key)
Definition thread.c:64
WizardExport WizardBooleanType WizardDeleteThreadKey(WizardThreadKey key)
Definition thread.c:99
size_t * WizardThreadKey
Definition thread_.h:38
WizardBooleanType
Definition wizard-type.h:26
@ WizardTrue
Definition wizard-type.h:28
@ WizardFalse
Definition wizard-type.h:27