ScholarQuill logoScholarQuillUniversity Notes
My Semester
Explore Notes
Past Papers12 New
Video CoursesNew
Search
Settings
Study Tools
GPA/CGPA Calculator
Schedule & To-Do
Student Portal
Contact
Contact
ScholarQuill logo
My Semester
Explore Notes
Past Papers12 New
Video CoursesNew
Search
Settings
GPA/CGPA Calculator
Schedule & To-Do
Student Portal
Contact
ScholarQuill logoScholarQuillUniversity Notes
Study PortalCOMP3139Concurrency Synchroniz…
Ctrl + K
Login
Explore
Search
Semester
Papers
CGPA
    COMP3139

    Parallel & Distributed Computing

    Progress0 / 33 done
    Topics33
    1Introduction to Parallel and Distributed Systems2Why Use Parallel and Distributed Systems?3Speedup and Amdahl's Law
    4Multi Processors (Shared Memory)5Networks of Workstations (Distributed Memory)6Clusters (Latest Variation)
    7Threads and Shared Memory8Processes and Message Passing9Distributed Shared Memory (DSM)10Distributed Shared Data (DSD)11Parallel Algorithms12Concurrency and Synchronization13Data and Work Partitioning14Common Parallelization Strategies15Granularity16Load Balancing
    17Parallel Search18Parallel Sorting19Shared-Memory Programming20Threads in Shared-Memory Programming21P Threads22Locks and Semaphores23Distributed-Memory Programming24Message Passing25Map Reduce26Distributed-Memory Programming with PI27Google's Map Reduce28Hadoop29Other Parallel Programming Systems30Tread Marks31Distributed Shared Memory
    32Scoped Behavior and Abstract Data Types
    33Process Templates
    9 min read
    Topic 12 of 33
    Topic Study Note Illustration
    12

    Concurrency and Synchronization

    Concurrency and synchronization are fundamental concepts in computer science, particularly in the realm of parallel and distributed computing. These concepts are crucial for managing multiple tasks or...

    Concurrency and Synchronization

    Concurrency and synchronization are fundamental concepts in computer science, particularly in the realm of parallel and distributed computing. These concepts are crucial for managing multiple tasks or processes that run simultaneously, ensuring that resources are accessed safely, and avoiding issues like race conditions or deadlocks.

    1. Concurrency

    Concurrency refers to the ability of a system to handle multiple tasks or processes at the same time, but not necessarily simultaneously. It allows a system to manage multiple tasks by organizing them in such a way that the execution of those tasks overlaps. Concurrency enables systems to run multiple processes, threads, or tasks in parallel or in a time-shared manner, thus improving system throughput, responsiveness, and resource utilization.

    Key Aspects of Concurrency:

    • Interleaving: In a single-core system, true parallelism may not be possible, but the CPU can switch between different tasks, giving the illusion of simultaneity. This is known as time slicing.
    • Parallelism vs. Concurrency:
      • Parallelism refers to literally executing multiple tasks at the same time, typically on different processors or cores.
      • Concurrency, however, involves structuring tasks such that they can progress independently, whether they execute simultaneously or not. It doesn’t require parallel hardware, only the ability to manage multiple tasks efficiently.
    • Non-blocking: Concurrency allows one task to run while another task is waiting for an event or resource, improving the overall responsiveness of a system.

    2. Why Concurrency is Important

    • Performance: Concurrency can improve performance by making better use of available hardware resources, especially in multi-core systems.
    • Responsiveness: In interactive applications (e.g., web servers, GUI applications), concurrency allows the system to continue responding to user input while background tasks (like network requests or database queries) are processed.
    • Resource Utilization: With concurrency, tasks can be executed when other tasks are waiting (e.g., for I/O operations), leading to more efficient resource usage.

    3. Synchronization

    Synchronization refers to the mechanisms that ensure that multiple concurrent tasks or threads can safely access shared resources (like memory, files, or network resources) without causing inconsistent or unexpected results. Synchronization is essential in concurrent systems to prevent problems like race conditions, deadlocks, and data corruption.

    In concurrent programming, synchronization involves coordinating the execution of processes to ensure that the shared data is consistent and that tasks proceed in the correct order.

    Common Problems in Concurrency:

    1. Race Conditions:

      • A race condition occurs when multiple threads or processes access shared data concurrently, and the outcome depends on the order in which the data is accessed. This can lead to unpredictable behavior.
      • Example: If two threads increment a shared counter variable simultaneously, the final result might not be the correct sum because both threads could read the counter's value at the same time before updating it.
    2. Deadlocks:

      • A deadlock occurs when two or more processes or threads are blocked forever, each waiting on the other to release a resource. This can result in a system freeze where no progress is made.
      • Example: Two threads each hold one lock and try to acquire the lock held by the other, leading to a circular waiting situation.
    3. Starvation:

      • Starvation happens when a thread is perpetually denied access to the resources it needs because other threads are constantly given priority. This can happen when the scheduling algorithm is unfair.
    4. Data Inconsistency:

      • In a concurrent system, multiple threads might simultaneously modify the same data. Without proper synchronization, this can lead to inconsistent data states or corrupted data.

    4. Synchronization Mechanisms

    To manage concurrency effectively, synchronization mechanisms are used to control access to shared resources and prevent issues like race conditions and deadlocks. Common synchronization mechanisms include:

    1. Locks:

    • Locks are used to ensure that only one thread or process can access a resource at a time. When a thread acquires a lock, other threads must wait until the lock is released.
    • Types of locks:
      • Mutex (Mutual Exclusion): A mutex is a lock that ensures only one thread can access a critical section of code at a time.
      • Spinlock: A spinlock is a lock where a thread repeatedly checks if the lock is available, “spinning” until it can acquire the lock. This can be inefficient if the lock is held for a long time.
      • Reentrant Lock: This allows a thread that already holds the lock to acquire it again without causing a deadlock.

    2. Semaphores:

    • A semaphore is a synchronization tool that controls access to a shared resource by maintaining a counter. It allows multiple threads to access a limited number of resources concurrently.
    • Binary Semaphore: A semaphore with a counter of 1, effectively functioning as a mutex.
    • Counting Semaphore: A semaphore with a counter greater than 1, useful when there are multiple identical resources available.
    • Example: In a printer pool with 3 printers, a counting semaphore would ensure that no more than three threads can print at the same time.

    3. Condition Variables:

    • Condition variables are used for signaling between threads. A thread can wait for a condition to become true, and another thread can signal (notify) it when that condition is met.
    • Commonly used with locks to implement more complex synchronization patterns.
    • Example: A producer-consumer problem, where the producer waits for space in a buffer, and the consumer waits for data in the buffer.

    4. Barriers:

    • A barrier is used to synchronize a group of threads, ensuring that all threads in the group reach a certain point (the barrier) before any of them continue execution. Barriers are often used in parallel algorithms to synchronize tasks after they complete one phase of execution before moving to the next.
    • Example: In a parallel matrix multiplication algorithm, all threads that are working on different parts of the matrix must synchronize after calculating their respective results.

    5. Read-Write Locks:

    • Read-write locks allow multiple threads to read shared data simultaneously, but only one thread can write to the data at a time. These locks provide better performance than regular mutexes when read operations are more frequent than write operations.
    • Example: A database where multiple users can read data concurrently but only one user can update the database at any given time.

    6. Transactional Memory:

    • Transactional memory is a high-level synchronization technique that allows threads to execute in parallel, with automatic rollback and retry mechanisms in case of conflicts (similar to database transactions).
    • This model provides an alternative to explicit locks, aiming to simplify programming while avoiding the complexity of managing locks manually.

    5. Concurrency Control Models

    There are several models for controlling concurrency, depending on the system and the nature of the tasks involved:

    1. Lock-based Synchronization:

    • In this model, tasks request locks to access shared resources. Once they finish using the resource, they release the lock.
    • Common problems include deadlock, priority inversion, and lock contention.

    2. Optimistic Concurrency:

    • In optimistic concurrency control, tasks proceed without locking shared resources, assuming that no conflicts will occur. If a conflict is detected when attempting to commit the changes (e.g., a data modification), the task may be rolled back and retried.
    • This approach is often used in systems where conflicts are rare but costly when they do occur.

    3. Event-driven Programming:

    • Event-driven systems use events and handlers rather than traditional thread-based concurrency. When an event occurs, an event handler is triggered, and the system reacts accordingly. This model is widely used in GUI applications and web servers.

    4. Message Passing:

    • In distributed systems, message-passing is a common concurrency model where processes communicate by sending and receiving messages. This avoids the need for shared memory and provides an explicit mechanism for synchronization.
    • Example: MPI (Message Passing Interface) used in high-performance computing.

    6. Challenges of Concurrency and Synchronization

    • Deadlock Prevention: Designing systems to avoid circular wait conditions where processes are indefinitely blocked. Deadlock detection, prevention, and recovery mechanisms need to be implemented.
    • Race Conditions: Ensuring that threads or processes do not interfere with each other when accessing shared resources, which could lead to incorrect results or data corruption.
    • Starvation: Implementing fair scheduling policies to ensure all threads get a chance to execute and avoid indefinite waiting.
    • Scalability: As the number of threads or processes increases, ensuring that synchronization mechanisms do not become bottlenecks.
    • Correctness: Designing synchronization mechanisms that guarantee correctness under all possible concurrent execution scenarios.

    7. Best Practices for Concurrency and Synchronization

    • Minimize Lock Contention: Use finer-grained locking (i.e., locking smaller sections of code or data) to reduce the chances that multiple threads will need to access the same resource simultaneously.
    • Avoid Deadlocks: Use lock hierarchies or try-locks to prevent deadlocks. Ensure that locks are acquired in a consistent order across threads.
    • Use Non-blocking Algorithms: When possible, implement non-blocking or lock-free algorithms, which allow multiple threads to progress without needing to acquire locks.
    ← Previous topic 11
    Parallel Algorithms
    Next topic 13 →
    Data and Work Partitioning

    Past Papers

    Open this section to view and download past papers

    Click on Show Past Papers to load available exam papers.

    Reading Progress
    0%
    9mremaining
    1.5kwords
    Intermediatelevel
    On This Page

    No headings found

    Study Toolkit

    Subject Portal

    Parallel & Distributed Computing