Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dleedev365/bounded-buffer-problem
A multi-threaded program that demonstrates "bound-buffer" problem using POSIX threads semaphores and mutexes
https://github.com/dleedev365/bounded-buffer-problem
multi-threading mutexes posix-threads semaphore
Last synced: 10 days ago
JSON representation
A multi-threaded program that demonstrates "bound-buffer" problem using POSIX threads semaphores and mutexes
- Host: GitHub
- URL: https://github.com/dleedev365/bounded-buffer-problem
- Owner: dleedev365
- Created: 2018-01-14T09:28:02.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2019-11-30T19:53:38.000Z (almost 5 years ago)
- Last Synced: 2024-03-23T00:52:03.778Z (8 months ago)
- Topics: multi-threading, mutexes, posix-threads, semaphore
- Language: C
- Homepage:
- Size: 71.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Purpose
The purpose of the project is to design a multi-threaded program with use of semaphore and mutex to avoid deadlocks# Technologies
- POSIX Threads# Process
### Step 1: The Language of Choice
The project involves use of a processor which sits at the core of a computer. To get to the core, a programming language must be low-level, which means it must provide little or no abstraction of programming concepts and be very close to writing actual machine instructions. My language of choice was C as it is a low-level language and supports multi-threaded programming with POSIX threads library.### Step 2: The Understanding of Multi-threading
The very first step I took before delving into coding was understanding the concept of multi-threading. Essentially, it is a programming model that divides the processor to perform different tasks at the same time. In other words, a program or an operating system process manages its use by more than one user at a time and multiple requests by the same user without having to have multiple copies of the programming running in the computer. Multi-threaded programs can help with improving the performance of a device or even allow adding new features without the need to change or upgrade the processor.### Step 3: The Implementation
To create the program, I first needed to create two groups of threads – worker thread and consumer thread. The worker threads pick a tool from one resource, create a new product with a material randomly generated from other resource and pushes a complete product into anther resource. Then, the consumer threads use a product created by a worker thread. As both types of threads share a common resource such as an array, semaphore and mutex which work as a key to control access to the common resource.
- [View Source Code](/main.c)### Step 4: Final Result & Evaluation
As a result, threads continued to produce and consume materials from a common resource without a deadlock (different threads are blocked to access the common resource, think it as a traffic jam at a 4-way intersection). I learned that multi-threaded programming efficiently uses the computer processor to do more than one tasks at a time. However, the design format of outputs could’ve been built better in a way that it only shows changing materials from resources. The current program displays outputs whenever a thread is executed even if there is no change in material from any resource.