Mutex error?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Mutex error?

Ron Teitelbaum
Hi All,

Can anyone explain this behavior?  

Image 3.9 [7051]  Win32  XP

semaphore := Mutex new.
[1 to: 100 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
[101 to: 200 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.

Results in:

1
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200

Any ideas why?  
I have also tried semaphore := Semaphore forMutualExclusion.  But get
similar results.

Thanks,

Ron Teitelbaum



Reply | Threaded
Open this post in threaded view
|

Re: Mutex error?

Nicolas Cellier-3
Hello Ron,
Squeak does not have true closure by default (optional package exists)
i is a temporary variable local in the context of definition of Blocks
(here UndefinedObject>>DoIt)

And a single temporary is allocated...

You should try this:

semaphore := Mutex new.
[1 to: 100 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
[101 to: 200 do: [:j | semaphore critical:[ Transcript cr; show: j]]] fork.


Nicolas


Ron Teitelbaum a écrit :

> Hi All,
>
> Can anyone explain this behavior?  
>
> Image 3.9 [7051]  Win32  XP
>
> semaphore := Mutex new.
> [1 to: 100 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
> [101 to: 200 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
>
> Results in:
>
> 1
> 102
> 103
> 104
> 105
> 106
> 107
> 108
> 109
> 110
> 111
> 112
> 113
> 114
> 115
> 116
> 117
> 118
> 119
> 120
> 121
> 122
> 123
> 124
> 125
> 126
> 127
> 128
> 129
> 130
> 131
> 132
> 133
> 134
> 135
> 136
> 137
> 138
> 139
> 140
> 141
> 142
> 143
> 144
> 145
> 146
> 147
> 148
> 149
> 150
> 151
> 152
> 153
> 154
> 155
> 156
> 157
> 158
> 159
> 160
> 161
> 162
> 163
> 164
> 165
> 166
> 167
> 168
> 169
> 170
> 171
> 172
> 173
> 174
> 175
> 176
> 177
> 178
> 179
> 180
> 181
> 182
> 183
> 184
> 185
> 186
> 187
> 188
> 189
> 190
> 191
> 192
> 193
> 194
> 195
> 196
> 197
> 198
> 199
> 200
>
> Any ideas why?  
> I have also tried semaphore := Semaphore forMutualExclusion.  But get
> similar results.
>
> Thanks,
>
> Ron Teitelbaum
>
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Mutex error?

cdavidshaffer
In reply to this post by Ron Teitelbaum
I think the current Squeak compiler allocates block arguments and temps
in the same context as the block is created in.  Try naming the two
block arguments differently:

semaphore := Mutex new.
[1 to: 100 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
[101 to: 200 do: [:j | semaphore critical:[ Transcript cr; show: j]]] fork.

Other options include sending fixTemps to the blocks to ensure that their temporary variables are actually different.

David




Reply | Threaded
Open this post in threaded view
|

RE: Mutex error?

Ron Teitelbaum
Thanks!  It got me again!!

Ron

> -----Original Message-----
> From: David Shaffer [mailto:[hidden email]]
> Sent: Sunday, February 18, 2007 2:43 PM
> To: [hidden email]; The general-purpose Squeak developers list
> Subject: Re: Mutex error?
>
> I think the current Squeak compiler allocates block arguments and temps
> in the same context as the block is created in.  Try naming the two
> block arguments differently:
>
> semaphore := Mutex new.
> [1 to: 100 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
> [101 to: 200 do: [:j | semaphore critical:[ Transcript cr; show: j]]]
> fork.
>
> Other options include sending fixTemps to the blocks to ensure that their
> temporary variables are actually different.
>
> David
>
>



Reply | Threaded
Open this post in threaded view
|

Re: Mutex error?

Philippe Marschall
I have a stroke list at work for every time it gets me.

Philippe

2007/2/19, Ron Teitelbaum <[hidden email]>:

> Thanks!  It got me again!!
>
> Ron
>
> > -----Original Message-----
> > From: David Shaffer [mailto:[hidden email]]
> > Sent: Sunday, February 18, 2007 2:43 PM
> > To: [hidden email]; The general-purpose Squeak developers list
> > Subject: Re: Mutex error?
> >
> > I think the current Squeak compiler allocates block arguments and temps
> > in the same context as the block is created in.  Try naming the two
> > block arguments differently:
> >
> > semaphore := Mutex new.
> > [1 to: 100 do: [:i | semaphore critical:[ Transcript cr; show: i]]] fork.
> > [101 to: 200 do: [:j | semaphore critical:[ Transcript cr; show: j]]]
> > fork.
> >
> > Other options include sending fixTemps to the blocks to ensure that their
> > temporary variables are actually different.
> >
> > David
> >
> >
>
>
>
>