
Database System Concepts
7th Edition
ISBN: 9780078022159
Author: Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher: McGraw-Hill Education
expand_more
expand_more
format_list_bulleted
Question
26.
HomeExpert Q&AMy answers
Student question
Time to preview question:
00:09:49
int QUEUE_IS_EMPTY; int QUEUE_IS_FULL; void generator(){ Object thing = generate(); pthread_mutex_lock(&qlock); if (QUEUE_IS_FULL){ pthread_cond_wait(&queue_not_full); } enqueue(thing); pthread_cond_signal(&queue_not_full); pthread_mutex_unlock(&qlock); } void consumer(){ pthread_mutex_lock(&qlock); Object thing = dequeue(); consume(thing); while (QUEUE_IS_EMPTY){ pthread_cond_wait(&queue_not_empty); } pthread_cond_signal(&queue_not_full); pthread_mutex_unlock(&qlock); }
This code generates objects in generator(), and consumes them in consumer().
Objects are placed into a queue to be consumed, and this queue has a limited size. enqueue() adds an item to the queue, and dequeue() removes one. An item may not be enqueued if the queue is full, or dequeued if the queue is empty. You may assume that QUEUE_IS_EMPTY and QUEUE_IS_FULL always correctly indicate whether the queue is empty, full, or neither, even if they are not updated in these methods.
There are three multithreading related errors in this code that could result in deadlocking or other undesirable behavior. What are they?
Expert Solution

This question has been solved!
Explore an expertly crafted, step-by-step solution for a thorough understanding of key concepts.
This is a popular solution
Trending nowThis is a popular solution!
Step by stepSolved in 3 steps

Knowledge Booster
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.Similar questions
- Note : addqueue works like Enqueue and deleteQueue works like Dequeue Consider the following statements: (8, 9) queueType queue; int num; Show what is output by the following segment of code num = 7; queue.addQueue (6); queue.addQueue (num); num = queue.front (); queue.deleteQueue(); queue.addQueue (num + 5); queue.addQueue (14); queue.addQueue (num queue.addQueue (25); queue.deleteQueue (); 2); cout <« "Queue elements: "; while (!queue.isEmptyQueue ()) { cout <« queue.front () << " "; queue.deleteQueue(); } cout <« endl; Queue elements: 14 14 4 25 Queue elements: 11 14 4 4 Queue elements: 11 14 4 25 Queue elements: 11 14 25 25arrow_forwardBankCustomerQueueADT Implement in C++ a BankCustomer QueueADT that does the following: 1. gets the input about a customer (first name, last name, Bank Account Number, Money to be withdrawn/deposited, etc.) from the user (from the keyboard) 2. inserts (enqueues) the Customer as a record into the BankCustomerQueueADT (your Queue ADT must be able to have a maximum of 20 customer records) 3. removes (dequeues) the Customer record from the BankCustomerQueueADT 4. your BankCustomerQueueADT must also have the behavior of retrieving and displaying the Queue info on the screen after each event (either entry of a Bank Customer into the queue, OR leaving of the Bank customer from the queue). NOTE: Please make sure you debug, run, test and see the program working correctly before submitting. Make sure all the code statements are commented. Make sure your program is indented properly.arrow_forwardpython help. Write a LikedQueue (code at bottom) Test it by: Add numbers from 13 to 23 in the queue. Print the length of the queue Check if the queue is empty Show the item at the front of the queue Remove the first item in the queue Add 100 to the queue Remove all items in the queue Check if the queue is empty """File: linkedqueue.pyAuthor: Ken Lambert"""from node import Nodefrom abstractcollection import AbstractCollectionclass LinkedQueue(AbstractCollection):"""A link-based queue implementation."""# Constructordef __init__(self, sourceCollection = None):"""Sets the initial state of self, which includes thecontents of sourceCollection, if it's present."""self.front = self.rear = NoneAbstractCollection.__init__(self, sourceCollection)# Accessor methodsdef __iter__(self):"""Supports iteration over a view of self."""passdef peek(self):"""Returns the item at the front of the queue.Precondition: the queue is not empty.Raises: KeyError if the stack is empty."""if self.isEmpty():raise…arrow_forward
- class BSTNode { int key; BSTNode left, right; public BSTNode(int item) { key = item; left = right = null; } } class BST_Tree { BSTNode root; BST_Tree() { // Constructor root = null; } boolean search(int key){ return (searchRec(root, key) != null); } public BSTNode searchRec(BSTNode root, int key) { if (root==null || root.key==key) return root; if (root.key > key) return searchRec(root.left, key); return searchRec (root.right, key); } void deleteKey(int key) { root = deleteRec(root, key); } /* A recursive function to insert a new key in BST */ BSTNode deleteRec(BSTNode root, int key) { /* Base Case: If the tree is empty */ if (root == null) return root; /* Otherwise, recur down the tree */ if (key < root.key)…arrow_forwardJava adt Draw the contents of the queue after the following statements execute. Clearly label the front and back of the queue. QueueInterface bankLine = new LinkedQueue<>(); bankLine .enqueue("John"); bankLine .enqueue("Matthew"); String next = bankLine .dequeue(); next = bankLine .dequeue(); bankLine .enqueue("Drew"); bankLine .enqueue("Heather"); next = bankLine .dequeue(); bankLine .enqueue("David"); next = bankLine .dequeue();arrow_forwardWhen an element is removed from a queue, where is it removed from?arrow_forward
- Attachedarrow_forward1 Assume some Node class with info & link fields. Complete this method in class List that returns a reference to the node containing the data item in the argument find This, Assume that find this is in the list public class List { protected Node head; protected int size; fublic Public Node find (char find This)arrow_forwardclass BSTNode { int key; BSTNode left, right; public BSTNode(int item) { key = item; left = right = null; } } class BST_Tree { BSTNode root; BST_Tree() { // Constructor root = null; } boolean search(int key){ return (searchRec(root, key) != null); } public BSTNode searchRec(BSTNode root, int key) { if (root==null || root.key==key) return root; if (root.key > key) return searchRec(root.left, key); return searchRec (root.right, key); } void deleteKey(int key) { root = deleteRec(root, key); } /* A recursive function to insert a new key in BST */ BSTNode deleteRec(BSTNode root, int key) { /* Base Case: If the tree is empty */ if (root == null) return root; /* Otherwise, recur down the tree */ if (key < root.key)…arrow_forward
- how does the structure if counting semaphore primitives differ frim binary semaphore primitives?arrow_forwardHow to answer the following questions screen shot show the text's arrayboundedqueue and the array unbounded queue The text's array-based queue is being used and holds a queue with a single element. We can say: A. the element is held at index 0. B. the value of front is -1 C. the value of front is one less than the value of rear. D. the value of front is equal to the value of rear.arrow_forwardclass BSTNode { int key; BSTNode left, right; public BSTNode(int item) { key = item; left = right = null; } } class BST_Tree { BSTNode root; BST_Tree() { // Constructor root = null; } boolean search(int key){ return (searchRec(root, key) != null); } public BSTNode searchRec(BSTNode root, int key) { if (root==null || root.key==key) return root; if (root.key > key) return searchRec(root.left, key); return searchRec (root.right, key); } void deleteKey(int key) { root = deleteRec(root, key); } /* A recursive function to insert a new key in BST */ BSTNode deleteRec(BSTNode root, int key) { /* Base Case: If the tree is empty */ if (root == null) return root; /* Otherwise, recur down the tree */ if (key < root.key)…arrow_forward
arrow_back_ios
SEE MORE QUESTIONS
arrow_forward_ios
Recommended textbooks for you
- Database System ConceptsComputer ScienceISBN:9780078022159Author:Abraham Silberschatz Professor, Henry F. Korth, S. SudarshanPublisher:McGraw-Hill EducationStarting Out with Python (4th Edition)Computer ScienceISBN:9780134444321Author:Tony GaddisPublisher:PEARSONDigital Fundamentals (11th Edition)Computer ScienceISBN:9780132737968Author:Thomas L. FloydPublisher:PEARSON
- C How to Program (8th Edition)Computer ScienceISBN:9780133976892Author:Paul J. Deitel, Harvey DeitelPublisher:PEARSONDatabase Systems: Design, Implementation, & Manag...Computer ScienceISBN:9781337627900Author:Carlos Coronel, Steven MorrisPublisher:Cengage LearningProgrammable Logic ControllersComputer ScienceISBN:9780073373843Author:Frank D. PetruzellaPublisher:McGraw-Hill Education

Database System Concepts
Computer Science
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:McGraw-Hill Education

Starting Out with Python (4th Edition)
Computer Science
ISBN:9780134444321
Author:Tony Gaddis
Publisher:PEARSON

Digital Fundamentals (11th Edition)
Computer Science
ISBN:9780132737968
Author:Thomas L. Floyd
Publisher:PEARSON

C How to Program (8th Edition)
Computer Science
ISBN:9780133976892
Author:Paul J. Deitel, Harvey Deitel
Publisher:PEARSON

Database Systems: Design, Implementation, & Manag...
Computer Science
ISBN:9781337627900
Author:Carlos Coronel, Steven Morris
Publisher:Cengage Learning

Programmable Logic Controllers
Computer Science
ISBN:9780073373843
Author:Frank D. Petruzella
Publisher:McGraw-Hill Education