| author | huffman | 
| Mon, 20 Dec 2010 09:48:16 -0800 | |
| changeset 41323 | ae1c227534f5 | 
| parent 39616 | 8052101883c3 | 
| child 41713 | a21084741b37 | 
| permissions | -rw-r--r-- | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
1  | 
(* Title: Pure/ML-Systems/multithreading.ML  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
2  | 
Author: Makarius  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
3  | 
|
| 28149 | 4  | 
Dummy implementation of multithreading setup.  | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
5  | 
*)  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
6  | 
|
| 25704 | 7  | 
signature BASIC_MULTITHREADING =  | 
8  | 
sig  | 
|
9  | 
val NAMED_CRITICAL: string -> (unit -> 'a) -> 'a  | 
|
10  | 
val CRITICAL: (unit -> 'a) -> 'a  | 
|
11  | 
end;  | 
|
12  | 
||
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
13  | 
signature MULTITHREADING =  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
14  | 
sig  | 
| 25704 | 15  | 
include BASIC_MULTITHREADING  | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
16  | 
val available: bool  | 
| 
39616
 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 
wenzelm 
parents: 
32777 
diff
changeset
 | 
17  | 
val max_threads: int ref  | 
| 
25775
 
90525e67ede7
added Multithreading.max_threads_value, which maps a value of 0 to number of CPUs;
 
wenzelm 
parents: 
25735 
diff
changeset
 | 
18  | 
val max_threads_value: unit -> int  | 
| 28554 | 19  | 
val enabled: unit -> bool  | 
| 28149 | 20  | 
val no_interrupts: Thread.threadAttribute list  | 
| 
32295
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
21  | 
val public_interrupts: Thread.threadAttribute list  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
22  | 
val private_interrupts: Thread.threadAttribute list  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
23  | 
val sync_interrupts: Thread.threadAttribute list -> Thread.threadAttribute list  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
24  | 
val with_attributes: Thread.threadAttribute list -> (Thread.threadAttribute list -> 'a) -> 'a  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
25  | 
val sync_wait: Thread.threadAttribute list option -> Time.time option ->  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
26  | 
ConditionVar.conditionVar -> Mutex.mutex -> bool Exn.result  | 
| 
39616
 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 
wenzelm 
parents: 
32777 
diff
changeset
 | 
27  | 
val trace: int ref  | 
| 
32295
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
28  | 
val tracing: int -> (unit -> string) -> unit  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
29  | 
val tracing_time: bool -> Time.time -> (unit -> string) -> unit  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
30  | 
  val real_time: ('a -> unit) -> 'a -> Time.time
 | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
31  | 
val self_critical: unit -> bool  | 
| 25704 | 32  | 
val serial: unit -> int  | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
33  | 
end;  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
34  | 
|
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
35  | 
structure Multithreading: MULTITHREADING =  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
36  | 
struct  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
37  | 
|
| 32185 | 38  | 
(* options *)  | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
39  | 
|
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
40  | 
val available = false;  | 
| 
39616
 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 
wenzelm 
parents: 
32777 
diff
changeset
 | 
41  | 
val max_threads = ref (1: int);  | 
| 28460 | 42  | 
fun max_threads_value () = 1: int;  | 
| 28554 | 43  | 
fun enabled () = false;  | 
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
44  | 
|
| 
32286
 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 
wenzelm 
parents: 
32186 
diff
changeset
 | 
45  | 
|
| 
 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 
wenzelm 
parents: 
32186 
diff
changeset
 | 
46  | 
(* attributes *)  | 
| 
 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 
wenzelm 
parents: 
32186 
diff
changeset
 | 
47  | 
|
| 
32295
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
48  | 
val no_interrupts = [];  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
49  | 
val public_interrupts = [];  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
50  | 
val private_interrupts = [];  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
51  | 
fun sync_interrupts _ = [];  | 
| 
28187
 
4062882c7df3
proper values of no_interrupts, regular_interrupts;
 
wenzelm 
parents: 
28169 
diff
changeset
 | 
52  | 
|
| 
32295
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
53  | 
fun with_attributes _ e = e [];  | 
| 28160 | 54  | 
|
| 
32295
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
55  | 
fun sync_wait _ _ _ _ = Exn.Result true;  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
56  | 
|
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
57  | 
|
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
58  | 
(* tracing *)  | 
| 
30612
 
cb6421b6a18f
future_job: do not inherit attributes, but enforce restricted interrupts -- attempt to prevent interrupt race conditions;
 
wenzelm 
parents: 
29564 
diff
changeset
 | 
59  | 
|
| 
39616
 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 
wenzelm 
parents: 
32777 
diff
changeset
 | 
60  | 
val trace = ref (0: int);  | 
| 
32295
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
61  | 
fun tracing _ _ = ();  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
62  | 
fun tracing_time _ _ _ = ();  | 
| 
 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 
wenzelm 
parents: 
32286 
diff
changeset
 | 
63  | 
fun real_time f x = (f x; Time.zeroTime);  | 
| 
32286
 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 
wenzelm 
parents: 
32186 
diff
changeset
 | 
64  | 
|
| 25735 | 65  | 
|
66  | 
(* critical section *)  | 
|
67  | 
||
| 
24690
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
68  | 
fun self_critical () = false;  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
69  | 
fun NAMED_CRITICAL _ e = e ();  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
70  | 
fun CRITICAL e = e ();  | 
| 
 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 
wenzelm 
parents:  
diff
changeset
 | 
71  | 
|
| 25735 | 72  | 
|
73  | 
(* serial numbers *)  | 
|
74  | 
||
| 
39616
 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 
wenzelm 
parents: 
32777 
diff
changeset
 | 
75  | 
local val count = ref (0: int)  | 
| 25704 | 76  | 
in fun serial () = (count := ! count + 1; ! count) end;  | 
77  | 
||
| 
28123
 
53cd972d7db9
provide dummy thread structures, including proper Thread.getLocal/setLocal;
 
wenzelm 
parents: 
26082 
diff
changeset
 | 
78  | 
end;  | 
| 
 
53cd972d7db9
provide dummy thread structures, including proper Thread.getLocal/setLocal;
 
wenzelm 
parents: 
26082 
diff
changeset
 | 
79  | 
|
| 
32286
 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 
wenzelm 
parents: 
32186 
diff
changeset
 | 
80  | 
structure Basic_Multithreading: BASIC_MULTITHREADING = Multithreading;  | 
| 
 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 
wenzelm 
parents: 
32186 
diff
changeset
 | 
81  | 
open Basic_Multithreading;  |