| author | kleing | 
| Thu, 03 Nov 2011 18:10:13 +1100 | |
| changeset 45323 | df7554ebe024 | 
| parent 43761 | e72ba84ae58f | 
| child 54717 | 42c209a6c225 | 
| 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: 
32777diff
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: 
25735diff
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: 
32286diff
changeset | 21 | val public_interrupts: Thread.threadAttribute list | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 22 | val private_interrupts: Thread.threadAttribute list | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 23 | val sync_interrupts: Thread.threadAttribute list -> Thread.threadAttribute list | 
| 41713 
a21084741b37
added Multithreading.interrupted (cf. java.lang.Thread.interrupted);
 wenzelm parents: 
39616diff
changeset | 24 | val interrupted: unit -> unit (*exception Interrupt*) | 
| 32295 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 25 | val with_attributes: Thread.threadAttribute list -> (Thread.threadAttribute list -> 'a) -> 'a | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 26 | val sync_wait: Thread.threadAttribute list option -> Time.time option -> | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 27 | ConditionVar.conditionVar -> Mutex.mutex -> bool Exn.result | 
| 39616 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
32777diff
changeset | 28 | val trace: int ref | 
| 32295 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 29 | val tracing: int -> (unit -> string) -> unit | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 30 | val tracing_time: bool -> Time.time -> (unit -> string) -> unit | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 31 |   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 | 32 | val self_critical: unit -> bool | 
| 25704 | 33 | val serial: unit -> int | 
| 24690 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 34 | end; | 
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 35 | |
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 36 | structure Multithreading: MULTITHREADING = | 
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 37 | struct | 
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 38 | |
| 32185 | 39 | (* options *) | 
| 24690 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 40 | |
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 41 | val available = false; | 
| 39616 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
32777diff
changeset | 42 | val max_threads = ref (1: int); | 
| 28460 | 43 | fun max_threads_value () = 1: int; | 
| 28554 | 44 | fun enabled () = false; | 
| 24690 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 45 | |
| 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: 
32186diff
changeset | 46 | |
| 
1fb5db48002d
added Multithreading.sync_wait, which turns enabled interrupts to sync ones, to ensure that wait will reaquire its lock when interrupted;
 wenzelm parents: 
32186diff
changeset | 47 | (* 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: 
32186diff
changeset | 48 | |
| 32295 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 49 | val no_interrupts = []; | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 50 | val public_interrupts = []; | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 51 | val private_interrupts = []; | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 52 | fun sync_interrupts _ = []; | 
| 28187 
4062882c7df3
proper values of no_interrupts, regular_interrupts;
 wenzelm parents: 
28169diff
changeset | 53 | |
| 41713 
a21084741b37
added Multithreading.interrupted (cf. java.lang.Thread.interrupted);
 wenzelm parents: 
39616diff
changeset | 54 | fun interrupted () = (); | 
| 
a21084741b37
added Multithreading.interrupted (cf. java.lang.Thread.interrupted);
 wenzelm parents: 
39616diff
changeset | 55 | |
| 32295 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 56 | fun with_attributes _ e = e []; | 
| 28160 | 57 | |
| 43761 
e72ba84ae58f
tuned signature -- corresponding to Scala version;
 wenzelm parents: 
41713diff
changeset | 58 | fun sync_wait _ _ _ _ = Exn.Res true; | 
| 32295 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 59 | |
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 60 | |
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 61 | (* tracing *) | 
| 30612 
cb6421b6a18f
future_job: do not inherit attributes, but enforce restricted interrupts -- attempt to prevent interrupt race conditions;
 wenzelm parents: 
29564diff
changeset | 62 | |
| 39616 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
32777diff
changeset | 63 | val trace = ref (0: int); | 
| 32295 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 64 | fun tracing _ _ = (); | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 65 | fun tracing_time _ _ _ = (); | 
| 
400cc493d466
renamed Multithreading.regular_interrupts to Multithreading.public_interrupts;
 wenzelm parents: 
32286diff
changeset | 66 | 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: 
32186diff
changeset | 67 | |
| 25735 | 68 | |
| 69 | (* critical section *) | |
| 70 | ||
| 24690 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 71 | fun self_critical () = false; | 
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 72 | fun NAMED_CRITICAL _ e = e (); | 
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 73 | fun CRITICAL e = e (); | 
| 
c661dae1070a
renamed ML-Systems/multithreading_dummy.ML to ML-Systems/multithreading.ML;
 wenzelm parents: diff
changeset | 74 | |
| 25735 | 75 | |
| 76 | (* serial numbers *) | |
| 77 | ||
| 39616 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
32777diff
changeset | 78 | local val count = ref (0: int) | 
| 25704 | 79 | in fun serial () = (count := ! count + 1; ! count) end; | 
| 80 | ||
| 28123 
53cd972d7db9
provide dummy thread structures, including proper Thread.getLocal/setLocal;
 wenzelm parents: 
26082diff
changeset | 81 | end; | 
| 
53cd972d7db9
provide dummy thread structures, including proper Thread.getLocal/setLocal;
 wenzelm parents: 
26082diff
changeset | 82 | |
| 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: 
32186diff
changeset | 83 | 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: 
32186diff
changeset | 84 | open Basic_Multithreading; |