{"id":1053,"date":"2017-08-11T11:11:48","date_gmt":"2017-08-11T11:11:48","guid":{"rendered":"https:\/\/www.bsetec.com\/blog\/?p=1053"},"modified":"2024-09-16T07:04:35","modified_gmt":"2024-09-16T07:04:35","slug":"deadlock-with-mutex-locks","status":"publish","type":"post","link":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/","title":{"rendered":"Deadlock with Mutex Locks"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1280\" height=\"720\" src=\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\" alt=\"maxresdefault\" class=\"wp-image-1054\" srcset=\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg 1280w, https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault-300x169.jpg 300w, https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault-1024x576.jpg 1024w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/figure><\/div>\n\n\n<p><span style=\"font-weight: 400;\"><\/span><\/p>\n\n\n\n<p>In 2024 also deadlock with mutex method we are explaining Let\u2019s see how deadlock can occur in a multithreaded Pthread program using mutex locks. The <i><span style=\"font-weight: 400;\">pthread_mutex_init() <\/span><\/i><span style=\"font-weight: 400;\">function initializes an unlocked mutex. Mutex locks are acquired and released using <\/span><i><span style=\"font-weight: 400;\">pthread_mutex_lock()<\/span><\/i><span style=\"font-weight: 400;\"> and <\/span><i><span style=\"font-weight: 400;\">pthread_mutex_unlock()<\/span><\/i><span style=\"font-weight: 400;\">, respectively. If a thread attempts to acquire a locked mutex, the call to <\/span><i><span style=\"font-weight: 400;\">pthread_mutex_lock()<\/span><\/i><span style=\"font-weight: 400;\"> blocks the thread until the owner of the mutex lock invokes <\/span><i><span style=\"font-weight: 400;\">pthread_mutex_unlock()<\/span><\/i><span style=\"font-weight: 400;\">. <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"><strong>Two mutex locks are created in the following code example<\/strong>: <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/* Create and initialize the mutex locks *\/ <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex t first mutex; <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex t second mutex; <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex init(&amp;first mutex,NULL); <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex init(&amp;second mutex,NULL); <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Next, two threads\u2014<\/span><i><span style=\"font-weight: 400;\">thread_one<\/span><\/i><span style=\"font-weight: 400;\"> and <\/span><i><span style=\"font-weight: 400;\">thread_two<\/span><\/i><span style=\"font-weight: 400;\">\u2014are created, and both these threads have access to both mutex locks. <\/span><i><span style=\"font-weight: 400;\">thread_one<\/span><\/i><span style=\"font-weight: 400;\"> and <\/span><i><span style=\"font-weight: 400;\">thread_two<\/span><\/i><span style=\"font-weight: 400;\"> run in the functions <\/span><i><span style=\"font-weight: 400;\">do_work_one()<\/span><\/i><span style=\"font-weight: 400;\"> and <\/span><i><span style=\"font-weight: 400;\">do_work_two()<\/span><\/i><span style=\"font-weight: 400;\">, respectively, as shown below: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n\n\n\n<p>                                     <span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><i><span style=\"font-weight: 400;\">\/* thread one runs in this function *\/ <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void *do work one(void *param) { <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex lock(&amp;first mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex lock(&amp;second mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/** <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* &nbsp;Do some work <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/ <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex unlock(&amp;second mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex unlock(&amp;first mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread exit(0); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/* thread two runs in this function &nbsp;*\/ <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void *do work two(void *param) { <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex lock(&amp;second mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex lock(&amp;first mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/** <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* Do some work <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/ <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex unlock(&amp;first mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread mutex unlock(&amp;second mutex); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread exit(0); <\/span><\/i><\/p>\n\n\n\n<p><i><span style=\"font-weight: 400;\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/span><\/i><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">In this example, thread one attempts to acquire the mutex locks in the order <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">(1) first_mutex, <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">(2) second_mutex, <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">while thread two attempts to acquire the mutex locks in the order <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">(1) second_mutex, <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">(2) first_mutex. <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Deadlock is possible if <\/span><i><span style=\"font-weight: 400;\">thread_one<\/span><\/i><span style=\"font-weight: 400;\"> acquires first mutex while thread two acquires second mutex. Note that, even though deadlock \u00a0is possible, it will not occur if thread one can acquire and release the mutex locks for <\/span><i><span style=\"font-weight: 400;\">first_mutex<\/span><\/i><span style=\"font-weight: 400;\"> and <\/span><i><span style=\"font-weight: 400;\">second_mutex<\/span><\/i><span style=\"font-weight: 400;\"> before <\/span><i><span style=\"font-weight: 400;\">thread_two<\/span><\/i><span style=\"font-weight: 400;\"> attempts to acquire the locks. And, of course, the order in which the threads run depends on how they are scheduled by the CPU scheduler. This example illustrates a problem with handling deadlocks: it is difficult to identify and test for deadlocks that may occur only under certain scheduling circumstances.<\/span><\/p>\n\n\n\n<p class=\"has-background\" style=\"background:linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 100%,rgb(51,167,181) 100%);font-size:16px\">Did you find this article useful? Let us know by leaving a comment below, or join us on <strong><a href=\"https:\/\/twitter.com\/BSEtech\" target=\"_blank\" rel=\"noreferrer noopener\">Twitter<\/a><\/strong> and <strong><a href=\"https:\/\/www.facebook.com\/bsetec\" target=\"_blank\" rel=\"noreferrer noopener\">Facebook<\/a><\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In 2024 also deadlock with mutex method we are explaining Let\u2019s see how deadlock can occur in a multithreaded Pthread program using mutex locks. The pthread_mutex_init() function initializes an unlocked mutex. Mutex locks are acquired and released using pthread_mutex_lock() and pthread_mutex_unlock(), respectively. If a thread attempts to acquire a locked mutex, the call to pthread_mutex_lock() [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1054,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Deadlock with Mutex Locks | BSEtec<\/title>\n<meta name=\"description\" content=\"Learn how mutex locks can lead to deadlocks and strategies to avoid them in your multithreaded applications.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deadlock with Mutex Locks | BSEtec\" \/>\n<meta property=\"og:description\" content=\"Learn how mutex locks can lead to deadlocks and strategies to avoid them in your multithreaded applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\" \/>\n<meta property=\"og:site_name\" content=\"BSEtec\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/bsetec\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-08-11T11:11:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-16T07:04:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"BSEtec\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@BSEtech\" \/>\n<meta name=\"twitter:site\" content=\"@BSEtech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"BSEtec\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\"},\"author\":{\"name\":\"BSEtec\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/#\/schema\/person\/24a8ed4eefa5e9bf112e896653ca21c4\"},\"headline\":\"Deadlock with Mutex Locks\",\"datePublished\":\"2017-08-11T11:11:48+00:00\",\"dateModified\":\"2024-09-16T07:04:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\"},\"wordCount\":1557,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\",\"url\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\",\"name\":\"Deadlock with Mutex Locks | BSEtec\",\"isPartOf\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\",\"datePublished\":\"2017-08-11T11:11:48+00:00\",\"dateModified\":\"2024-09-16T07:04:35+00:00\",\"description\":\"Learn how mutex locks can lead to deadlocks and strategies to avoid them in your multithreaded applications.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage\",\"url\":\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\",\"contentUrl\":\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg\",\"width\":1280,\"height\":720,\"caption\":\"Deadlock with Mutex Locks\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.bsetec.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deadlock with Mutex Locks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/#website\",\"url\":\"https:\/\/www.bsetec.com\/blog\/\",\"name\":\"BSEtec\",\"description\":\"Exploring the World of Tech, One Byte at a Time\",\"publisher\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/#organization\"},\"alternateName\":\"BSEtec\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.bsetec.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/#organization\",\"name\":\"BSEtec\",\"url\":\"https:\/\/www.bsetec.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2023\/01\/fav.ico\",\"contentUrl\":\"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2023\/01\/fav.ico\",\"width\":1,\"height\":1,\"caption\":\"BSEtec\"},\"image\":{\"@id\":\"https:\/\/www.bsetec.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/bsetec\/\",\"https:\/\/x.com\/BSEtech\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/#\/schema\/person\/24a8ed4eefa5e9bf112e896653ca21c4\",\"name\":\"BSEtec\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.bsetec.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/20fcfaf426a285886f813fd3e9e0ad48f22440b11201e9a669807c088bfdac8e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/20fcfaf426a285886f813fd3e9e0ad48f22440b11201e9a669807c088bfdac8e?s=96&d=mm&r=g\",\"caption\":\"BSEtec\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deadlock with Mutex Locks | BSEtec","description":"Learn how mutex locks can lead to deadlocks and strategies to avoid them in your multithreaded applications.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/","og_locale":"en_US","og_type":"article","og_title":"Deadlock with Mutex Locks | BSEtec","og_description":"Learn how mutex locks can lead to deadlocks and strategies to avoid them in your multithreaded applications.","og_url":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/","og_site_name":"BSEtec","article_publisher":"https:\/\/www.facebook.com\/bsetec\/","article_published_time":"2017-08-11T11:11:48+00:00","article_modified_time":"2024-09-16T07:04:35+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg","type":"image\/jpeg"}],"author":"BSEtec","twitter_card":"summary_large_image","twitter_creator":"@BSEtech","twitter_site":"@BSEtech","twitter_misc":{"Written by":"BSEtec","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#article","isPartOf":{"@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/"},"author":{"name":"BSEtec","@id":"https:\/\/www.bsetec.com\/blog\/#\/schema\/person\/24a8ed4eefa5e9bf112e896653ca21c4"},"headline":"Deadlock with Mutex Locks","datePublished":"2017-08-11T11:11:48+00:00","dateModified":"2024-09-16T07:04:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/"},"wordCount":1557,"commentCount":0,"publisher":{"@id":"https:\/\/www.bsetec.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/","url":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/","name":"Deadlock with Mutex Locks | BSEtec","isPartOf":{"@id":"https:\/\/www.bsetec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage"},"image":{"@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg","datePublished":"2017-08-11T11:11:48+00:00","dateModified":"2024-09-16T07:04:35+00:00","description":"Learn how mutex locks can lead to deadlocks and strategies to avoid them in your multithreaded applications.","breadcrumb":{"@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#primaryimage","url":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg","contentUrl":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg","width":1280,"height":720,"caption":"Deadlock with Mutex Locks"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bsetec.com\/blog\/deadlock-with-mutex-locks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bsetec.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Deadlock with Mutex Locks"}]},{"@type":"WebSite","@id":"https:\/\/www.bsetec.com\/blog\/#website","url":"https:\/\/www.bsetec.com\/blog\/","name":"BSEtec","description":"Exploring the World of Tech, One Byte at a Time","publisher":{"@id":"https:\/\/www.bsetec.com\/blog\/#organization"},"alternateName":"BSEtec","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bsetec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.bsetec.com\/blog\/#organization","name":"BSEtec","url":"https:\/\/www.bsetec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bsetec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2023\/01\/fav.ico","contentUrl":"https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2023\/01\/fav.ico","width":1,"height":1,"caption":"BSEtec"},"image":{"@id":"https:\/\/www.bsetec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/bsetec\/","https:\/\/x.com\/BSEtech"]},{"@type":"Person","@id":"https:\/\/www.bsetec.com\/blog\/#\/schema\/person\/24a8ed4eefa5e9bf112e896653ca21c4","name":"BSEtec","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bsetec.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/20fcfaf426a285886f813fd3e9e0ad48f22440b11201e9a669807c088bfdac8e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/20fcfaf426a285886f813fd3e9e0ad48f22440b11201e9a669807c088bfdac8e?s=96&d=mm&r=g","caption":"BSEtec"}}]}},"blog_post_layout_featured_media_urls":{"thumbnail":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault-150x150.jpg",150,150,true],"full":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",1280,720,false]},"categories_names":{"1":{"name":"Uncategorized","link":"https:\/\/www.bsetec.com\/blog\/category\/uncategorized\/"}},"tags_names":[],"comments_number":"0","wpmagazine_modules_lite_featured_media_urls":{"thumbnail":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault-150x150.jpg",150,150,true],"cvmm-medium":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",300,169,false],"cvmm-medium-plus":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",305,172,false],"cvmm-portrait":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",400,225,false],"cvmm-medium-square":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",600,338,false],"cvmm-large":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",1024,576,false],"cvmm-small":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",130,73,false],"full":["https:\/\/www.bsetec.com\/blog\/wp-content\/uploads\/2017\/08\/maxresdefault.jpg",1280,720,false]},"_links":{"self":[{"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/posts\/1053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/comments?post=1053"}],"version-history":[{"count":2,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/posts\/1053\/revisions"}],"predecessor-version":[{"id":7887,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/posts\/1053\/revisions\/7887"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/media\/1054"}],"wp:attachment":[{"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/media?parent=1053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/categories?post=1053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bsetec.com\/blog\/wp-json\/wp\/v2\/tags?post=1053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}