Mercurial > projects > dwt2
annotate org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/Lock.d @ 22:4642ab680468
some work on dwt-win for tango/phobos
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 20 Mar 2009 12:52:28 +0100 |
parents | 52184e4b815c |
children | 0ecb2b338560 |
rev | line source |
---|---|
0
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 * Copyright (c) 2000, 2005 IBM Corporation and others. |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 * Port to the D programming language: |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Frank Benoit <benoit@tionex.de> |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module org.eclipse.swt.internal.Lock; |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
19
52184e4b815c
no more direct tango.core.Thread. Rename JThread to java.lang.Thread.
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
15 import java.lang.Thread; |
22
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
16 version(Tango){ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
17 import tango.core.sync.Mutex; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
18 import tango.core.sync.Condition; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
19 } else { // Phobos |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
20 } |
0
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 /** |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 * Instance of this represent a recursive monitor. |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 */ |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 public class Lock { |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 int count, waitCount; |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 Thread owner; |
22
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
28 version(Tango){ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
29 Mutex mutex; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
30 Condition cond; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
31 } else { // Phobos |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
32 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
33 |
0
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 public this() { |
22
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
36 version(Tango){ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
37 mutex = new Mutex; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
38 cond = new Condition(mutex); |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
39 } else { // Phobos |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
40 } |
0
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 } |
22
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
42 /** |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
43 * Locks the monitor and returns the lock count. If |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
44 * the lock is owned by another thread, wait until |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
45 * the lock is released. |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
46 * |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
47 * @return the lock count |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
48 */ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
49 public int lock() { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
50 version(Tango){ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
51 synchronized (mutex) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
52 Thread current = Thread.currentThread(); |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
53 if (owner !is current) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
54 waitCount++; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
55 while (count > 0) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
56 try { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
57 cond.wait(); |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
58 } catch (SyncException e) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
59 /* Wait forever, just like synchronized blocks */ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
60 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
61 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
62 --waitCount; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
63 owner = current; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
64 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
65 return ++count; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
66 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
67 } else { // Phobos |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
68 implMissing( __FILE__, __LINE__ ); |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
69 return 0; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
70 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
71 } |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
72 |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
73 /** |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
74 * Unlocks the monitor. If the current thread is not |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
75 * the monitor owner, do nothing. |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
76 */ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
77 public void unlock() { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
78 version(Tango){ |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
79 synchronized (mutex) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
80 Thread current = Thread.currentThread(); |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
81 if (owner is current) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
82 if (--count is 0) { |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
83 owner = null; |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
84 if (waitCount > 0) cond.notifyAll(); |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
85 } |
0
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 } |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 } |
22
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
88 } else { // Phobos |
4642ab680468
some work on dwt-win for tango/phobos
Frank Benoit <benoit@tionex.de>
parents:
19
diff
changeset
|
89 implMissing( __FILE__, __LINE__ ); |
0
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 } |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 } |
6dd524f61e62
add dwt win and basic java stuff
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 } |