{"id":17866,"date":"2024-03-15T15:51:19","date_gmt":"2024-03-15T15:51:19","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/"},"modified":"2024-03-21T11:56:11","modified_gmt":"2024-03-21T11:56:11","slug":"how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/","title":{"rendered":"How to use Mutex in Go language to ensure data read and write correctness?"},"content":{"rendered":"<p>In Go language, the Mutex type in the sync package can be used to ensure the correctness of data reading and writing. The Mutex, short for mutual exclusion lock, provides two methods: Lock and Unlock, for locking and unlocking. The following is an example code that demonstrates how to use Mutex to ensure the correctness of data reading and writing.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">package<\/span> main\r\n\r\n<span class=\"hljs-keyword\">import<\/span> (\r\n\t<span class=\"hljs-string\">\"fmt\"<\/span>\r\n\t<span class=\"hljs-string\">\"sync\"<\/span>\r\n\t<span class=\"hljs-string\">\"time\"<\/span>\r\n)\r\n\r\n<span class=\"hljs-keyword\">type<\/span> Counter <span class=\"hljs-keyword\">struct<\/span> {\r\n\tmu    sync.Mutex\r\n\tcount <span class=\"hljs-type\">int<\/span>\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(c *Counter)<\/span><\/span> Increment() {\r\n\tc.mu.Lock()\r\n\t<span class=\"hljs-keyword\">defer<\/span> c.mu.Unlock()\r\n\tc.count++\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(c *Counter)<\/span><\/span> Read() <span class=\"hljs-type\">int<\/span> {\r\n\tc.mu.Lock()\r\n\t<span class=\"hljs-keyword\">defer<\/span> c.mu.Unlock()\r\n\t<span class=\"hljs-keyword\">return<\/span> c.count\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span><\/span> {\r\n\tcounter := Counter{}\r\n\twg := sync.WaitGroup{}\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u542f\u52a8\u591a\u4e2agoroutine\u5e76\u53d1\u5730\u5bf9\u8ba1\u6570\u5668\u8fdb\u884c\u589e\u52a0\u64cd\u4f5c<\/span>\r\n\t<span class=\"hljs-keyword\">for<\/span> i := <span class=\"hljs-number\">0<\/span>; i &lt; <span class=\"hljs-number\">100<\/span>; i++ {\r\n\t\twg.Add(<span class=\"hljs-number\">1<\/span>)\r\n\t\t<span class=\"hljs-keyword\">go<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">()<\/span><\/span> {\r\n\t\t\t<span class=\"hljs-keyword\">defer<\/span> wg.Done()\r\n\t\t\tcounter.Increment()\r\n\t\t}()\r\n\t}\r\n\r\n\twg.Wait()\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u8bfb\u53d6\u8ba1\u6570\u5668\u7684\u503c<\/span>\r\n\tfmt.Println(counter.Read())\r\n}\r\n<\/code><\/pre>\n<p>The Counter type in the code above contains a field mu of type sync.Mutex to protect read and write operations on the count field. The Increment method is used to increase the count, while the Read method is used to read the value of count.<\/p>\n<p>In the Increment and Read methods, c.mu.Lock() is used to lock first, and c.mu.Unlock() is used to unlock at the end of the method. This ensures that only one goroutine can access the count field in the code block, thereby ensuring the correctness of data reading and writing.<\/p>\n<p>In the main function, 100 concurrent goroutines are launched to increment the counter, which is then read. By using a Mutex to lock and unlock, there is no issue of data race when multiple goroutines concurrently increment the counter. The final value of the counter is 100, indicating that the correctness of data reading and writing has been guaranteed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Go language, the Mutex type in the sync package can be used to ensure the correctness of data reading and writing. The Mutex, short for mutual exclusion lock, provides two methods: Lock and Unlock, for locking and unlocking. The following is an example code that demonstrates how to use Mutex to ensure the correctness [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-17866","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to use Mutex in Go language to ensure data read and write correctness? - Blog - Silicon Cloud<\/title>\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.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use Mutex in Go language to ensure data read and write correctness?\" \/>\n<meta property=\"og:description\" content=\"In Go language, the Mutex type in the sync package can be used to ensure the correctness of data reading and writing. The Mutex, short for mutual exclusion lock, provides two methods: Lock and Unlock, for locking and unlocking. The following is an example code that demonstrates how to use Mutex to ensure the correctness [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T15:51:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T11:56:11+00:00\" \/>\n<meta name=\"author\" content=\"Isabella Edwards\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Isabella Edwards\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\"},\"author\":{\"name\":\"Isabella Edwards\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\"},\"headline\":\"How to use Mutex in Go language to ensure data read and write correctness?\",\"datePublished\":\"2024-03-15T15:51:19+00:00\",\"dateModified\":\"2024-03-21T11:56:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\"},\"wordCount\":229,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\",\"name\":\"How to use Mutex in Go language to ensure data read and write correctness? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T15:51:19+00:00\",\"dateModified\":\"2024-03-21T11:56:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use Mutex in Go language to ensure data read and write correctness?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\",\"name\":\"Isabella Edwards\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"caption\":\"Isabella Edwards\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use Mutex in Go language to ensure data read and write correctness? - Blog - Silicon Cloud","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.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/","og_locale":"en_US","og_type":"article","og_title":"How to use Mutex in Go language to ensure data read and write correctness?","og_description":"In Go language, the Mutex type in the sync package can be used to ensure the correctness of data reading and writing. The Mutex, short for mutual exclusion lock, provides two methods: Lock and Unlock, for locking and unlocking. The following is an example code that demonstrates how to use Mutex to ensure the correctness [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T15:51:19+00:00","article_modified_time":"2024-03-21T11:56:11+00:00","author":"Isabella Edwards","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Isabella Edwards","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/"},"author":{"name":"Isabella Edwards","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd"},"headline":"How to use Mutex in Go language to ensure data read and write correctness?","datePublished":"2024-03-15T15:51:19+00:00","dateModified":"2024-03-21T11:56:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/"},"wordCount":229,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/","name":"How to use Mutex in Go language to ensure data read and write correctness? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T15:51:19+00:00","dateModified":"2024-03-21T11:56:11+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-mutex-in-go-language-to-ensure-data-read-and-write-correctness\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use Mutex in Go language to ensure data read and write correctness?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd","name":"Isabella Edwards","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","caption":"Isabella Edwards"},"url":"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/17866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=17866"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/17866\/revisions"}],"predecessor-version":[{"id":51506,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/17866\/revisions\/51506"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=17866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=17866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=17866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}