Cω extended C# 1.x with a simple, declarative and powerful model of concurrency – join patterns – applicable both to multithreaded applications and to the orchestration of asynchronous, event-based distributed applications. With Generics available in C# 2.0, we can now provide join patterns as a library rather than a language feature. The Joins library extends its clients with an embedded, type-safe and mostly declarative language for expressing synchronization patterns. The library has some advantages over Cω: it is language neutral, supporting other languages like Visual Basic; its join patterns are more dynamic, allowing solutions difficult to express with Cω; its code is easy to modify, fostering experimentation. Although presenting fewer optimization opportunities, the implementation is efficient and its interface makes it trivial to translate Cω programs to C#. We describe the interface and implementation of Joins which (ab)uses almost every feature of Generics.


Transactional Memory Return Type Software Transactional Memory Public Class Join Object 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Microsoft Research: Cω (2004),
  2. 2.
    Russo, C.: Joins: A Concurrency Library, Binaries with tutorial and samples (2006),
  3. 3.
    Benton, N., Cardelli, L., Fournet, C.: Modern concurrency abstractions for C#. ACM Transactions on Programming Languages and Systems 26 (2004)Google Scholar
  4. 4.
    Itzstein, G.S., Kearney, D.: Join Java: An alternative concurrency semantics for Java. Technical Report ACRC-01-001, University of South Australia (2001)Google Scholar
  5. 5.
    Chrysanthakopoulos, G., Singh, S.: An asynchronous messaging library for C#. In: Synchronization and Concurrency in Object-Oriented Languages (SCOOL). OOPSLA 2005 Workshop, UR Research (2005)Google Scholar
  6. 6.
    Kennedy, A.J., Russo, C.V.: Generalized algebraic data types and object-oriented programming. In: Object-Oriented Programming: Systems, Languages, Applications (OOPSLA), San Diego. ACM, New York (2005)Google Scholar
  7. 7.
    Fournet, C., Gonthier, G.: The join calculus: a language for distributed mobile programming. In: Barthe, G., et al. (eds.) APPSEM 2000. LNCS, vol. 2395. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  8. 8.
    Fournet, C., Le Fessant, F., Maranget, L., Schmitt, A.: JoCaml: a language for concurrent distributed and mobile programming. In: Jeuring, J., Jones, S.L.P. (eds.) AFP 2002. LNCS, vol. 2638. Springer, Heidelberg (2003)CrossRefGoogle Scholar
  9. 9.
    Odersky, M.: An overview of functional nets. In: Barthe, G., et al. (eds.) APPSEM 2000. LNCS, vol. 2395. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  10. 10.
    Singh, S.: Higher-order combinators for join patterns using STM. In: TRANSACT ACM Workshop on Languages, Compilers and Hardware Support for Transactional Computing (2006)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Claudio Russo
    • 1
  1. 1.Microsoft Research LtdCambridgeUnited Kingdom

Personalised recommendations