Changes in / [73de175:35a9e41]
- Location:
- doc/papers/concurrency
- Files:
-
- 3 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/concurrency/Paper.tex
r73de175 r35a9e41 1309 1309 void print( Tree & mutex tree ) { $\C{// prefix traversal}$ 1310 1310 // write value 1311 print( *tree->left ); $\C{// multiply acquire monitor lock for tree on each recursion}$1312 print( *tree->right );1311 print( tree->left ); $\C{// multiply acquire monitor lock for tree on each recursion}$ 1312 print( tree->right ); 1313 1313 } 1314 1314 \end{cfa} … … 2089 2089 In \CFA, ordering of monitor acquisition relies on memory ordering to prevent deadlock~\cite{Havender68}, because all objects have distinct non-overlapping memory layouts, and mutual-exclusion for a monitor is only defined for its lifetime. 2090 2090 When a mutex call is made, pointers to the concerned monitors are aggregated into a variable-length array and sorted. 2091 This array persists for the entire duration of the mutual 2091 This array persists for the entire duration of the mutual-exclusion and is used extensively for synchronization operations. 2092 2092 2093 2093 To improve performance and simplicity, context switching occurs inside a routine call, so only callee-saved registers are copied onto the stack and then the stack register is switched; … … 2170 2170 \end{cfa} 2171 2171 The method used to get time is @clock_gettime( CLOCK_REALTIME )@. 2172 Each benchmark is performed @N@ times, where @N@ varies depending on the benchmark; 2173 the total time is divided by @N@ to obtain the average time for a benchmark. 2172 Each benchmark is performed @N@ times, where @N@ varies depending on the benchmark, the total time is divided by @N@ to obtain the average time for a benchmark. 2174 2173 All omitted tests for other languages are functionally identical to the shown \CFA test. 2175 2174 … … 2316 2315 } 2317 2316 \end{cfa} 2318 \captionof{figure}{\CFA Internal -scheduling benchmark}2317 \captionof{figure}{\CFA Internal scheduling benchmark} 2319 2318 \label{f:int-sched} 2320 2319 2321 2320 \centering 2322 \captionof{table}{Internal -scheduling comparison (nanoseconds)}2321 \captionof{table}{Internal scheduling comparison (nanoseconds)} 2323 2322 \label{tab:int-sched} 2324 2323 \bigskip … … 2367 2366 } 2368 2367 \end{cfa} 2369 \captionof{figure}{\CFA external -scheduling benchmark}2368 \captionof{figure}{\CFA external scheduling benchmark} 2370 2369 \label{f:ext-sched} 2371 2370 2372 2371 \centering 2373 2372 2374 \captionof{table}{External -scheduling comparison (nanoseconds)}2373 \captionof{table}{External scheduling comparison (nanoseconds)} 2375 2374 \label{tab:ext-sched} 2376 2375 \bigskip … … 2398 2397 } 2399 2398 \end{cfa} 2400 \captionof{figure}{\CFA object -creation benchmark}2399 \captionof{figure}{\CFA object creation benchmark} 2401 2400 \label{f:creation} 2402 2401
Note: See TracChangeset
for help on using the changeset viewer.