The goal of this project is to propose a programming paradigm to make concurrent libraries reusable by other programmers.
PHD
The devices we use on a daily basis do not compute faster than the desktop computers we used 10 years ago. Manufacturers have just started multiplying the CPU cores in handheld phones, adding multi-cores and concurrent capabilities to almost all computing devices. Writing concurrent software is the way to improve performance: making graphics of video games more fluid, internet browsers faster, or smartphone applications more responsive.
Yet, leveraging these so called multi-cores is hard because concurrent programs are not reusable. When a programmer, say Alice, writes a library she synchronises the methods to prevent their concurrent execution from producing inconsistencies. Bob cannot reuse Alice's library without knowing how it was implemented; he must first ensure that Alice's methods synchronize with his own methods by at least understanding and possibly modifying her code.
This lack of reusability affects most concurrent libraries (e.g., C++ Intel thread building block, C# System.Collections.Concurrent, java.util.concurrent).
This research topic investigates the reusability of abstractions in a monitor-based concurrent environment. The goal is to make highly concurrent programs reusable by defining and implementing a new programming paradigm to write reusable methods. A reusable method is a sequential method that Alice synchronizes using the most appropriate synchronization semantics chosen among a set of pre-existing ones. This technique should make the development of highly concurrent multicore applications modular by offering application-level concurrency and by letting Bob write methods that invoke Alice's and whose semantics will prevail over Alice's at runtime.
The opportunity ID for this research opportunity is 1790