Thread synchronization
xs0
xs0 at xs0.com
Thu Nov 30 04:04:48 PST 2006
Sean Kelly wrote:
> JohnC wrote:
>> What's the recommended way to guard static variables?
>>
>> 1) synchronized by itself?
>>
>> static Object getObj() {
>> synchronized {
>> return sharedVar;
>> }
>> }
>>
>> 2) synchronized on classinfo?
>>
>> static Object getObj() {
>> synchronized (typeof(sharedVar).classinfo) {
>> return sharedVar;
>> }
>> }
>>
>> 3) synchronized on a static Object instance?
>>
>> static this() {
>> syncLock = new Object;
>> }
>>
>> static Object getObj() {
>> synchronized (syncLock) {
>> return sharedVar;
>> }
>> }
>>
>> I've seen all these patterns used. Are they all safe?
>
> They're all safe. Since #1 is in a static method, it will synchronize
> on the ClassInfo object, just like you're doing manually in #2. And #3
> just specifies a separate static object on which to synchronize. But
> since it's static, you'll get the same effect.
I think the first one synchronizes only on the statement itself, so
while only one getObj can execute concurrently, it doesn't guard against
a similar setObj()..
xs0
More information about the Digitalmars-d-learn
mailing list