Concurrent computing: Difference between revisions

('extern crate' is not needed in recent versions)
Line 1,025:
=={{header|J}}==
 
Using J's new threading primitives (in place of some sort of thread emulation):
Example:
 
<syntaxhighlight lang="j"J>reqthreads=: {{ smoutput0&>({~?~T.@#);:'Enjoy Rosetta'^:(0>.y-1 CodeT.'')0 }}
dispatchwith=: (t.'')every
newmutex=: 10&T.
lock=: 11&T.
unlock=: 13&T.
synced=: {{
lock n
r=. u y
unlock n
r
}}
register=: {{ out=: out, y }} synced (newmutex 0)
task=: {{
reqthreads 3 NB. at least 3 worker threads
out=: EMPTY
#@> register dispatchwith ;:'Enjoy Rosetta Code'
out
Enjoy }}</syntaxhighlight>
 
Sample use:
 
<syntaxhighlight lang=J> task''
Enjoy
Rosetta
Code
task''
Enjoy </syntaxhighlight>
Enjoy
 
Code
NOTES AND CAUTIONS:
Rosetta</syntaxhighlight>
 
1) While J's syntax and semantics is highly parallel, it is a deterministic sort of parallelism (analogous to the design of modern GPUs) and not the stochastic parallelism which is implied in this task specification (and which is usually obtained by timeslicing threads of control). The randomness implemented here is orthogonal to the parallelism in the display (and you could remove <code>smoutput&</code> without altering the appearence, in this trivial example).
 
2) The current release of J (and the past implementations) do not implement hardware based concurrency. This is partially an economic issue (since all of the current and past language implementations have been distributed for free, with terms which allow free distribution), and partially a hardware maturity issue (historically, most CPU multi-core development has been optimized for stochastic parallelism with minimal cheap support for large scale deterministic parallelism and GPUs have not been capable of supporting the kind of generality needed by J).
 
This state of affairs is likely to change, eventually (most likely this will be after greater than factor of 2 speedups from hardware parallelism are available for the J users in cases which are common and important enough to support the implementation). But, for now, J's parallelism is entirely conceptual.
 
=={{header|Java}}==
6,951

edits