﻿
{"id":5397,"date":"2016-12-04T14:38:13","date_gmt":"2016-12-04T14:38:13","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5397"},"modified":"2016-12-04T14:38:13","modified_gmt":"2016-12-04T14:38:13","slug":"cta-monitor-sinifi-ile-thread-kontrolu","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-monitor-sinifi-ile-thread-kontrolu\/","title":{"rendered":"C#&#8217;ta Monitor S\u0131n\u0131f\u0131 \u0130le Thread Kontrol\u00fc"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Asenkron yakla\u015f\u0131m sergiledi\u011fimiz \u00e7al\u0131\u015fmalar\u0131m\u0131zda herhangi bir T an\u0131nda farkl\u0131 Thread&#8217;lardaki i\u015flemleri belirli bir s\u0131ralama g\u00f6zeterek ger\u00e7ekle\u015ftirmek i\u00e7in <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-lock-anahtar-sozcugu\/\" target=\"_blank\">Lock<\/a> yap\u0131s\u0131ndan faydalanmaktay\u0131z. Lock yap\u0131s\u0131, farkl\u0131 Thread&#8217;larda \u00e7al\u0131\u015fan Processlerin ayn\u0131 anda i\u015flenmesinden ziyade Lock bloklar\u0131n\u0131n s\u0131ras\u0131yla hiyerar\u015fi g\u00f6zetilerek senkron bir \u015fekilde i\u015flenmesini sa\u011flayan bir yap\u0131d\u0131r. \u0130\u015fte bu i\u015flemin ayn\u0131s\u0131n\u0131 ger\u00e7ekle\u015ftirmemizi sa\u011flayan Monitor s\u0131n\u0131f\u0131n\u0131 ve ilgili metotlar\u0131n\u0131 bu i\u00e7eri\u011fimizde ele alaca\u011f\u0131z.<\/p>\n<p>Hemen a\u015fa\u011f\u0131daki kod blo\u011funu ele alal\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Task t1 = new Task(() =&gt;\r\n            {\r\n                for (int i = 0; i &lt; 5; i++)\r\n                {\r\n                    Console.Write(&quot;* &quot;);\r\n                    Thread.Sleep(100);\r\n                }\r\n            });\r\n            Task t2 = new Task(() =&gt;\r\n            {\r\n                for (int i = 0; i &lt; 5; i++)\r\n                {\r\n                    Console.Write(&quot;- &quot;);\r\n                    Thread.Sleep(100);\r\n                }\r\n            });\r\n            Task t3 = new Task(() =&gt;\r\n            {\r\n                for (int i = 0; i &lt; 5; i++)\r\n                {\r\n                    Console.Write(&quot;+ &quot;);\r\n                    Thread.Sleep(100);\r\n                }\r\n            });\r\n            t1.Start();\r\n            t2.Start();\r\n            t3.Start();\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Bu program\u0131 derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z zaman asenkron bir \u00e7al\u0131\u015fma sonucu a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcne benzer kar\u0131\u015f\u0131k bir vaziyette sonu\u00e7lar elde edece\u011fiz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/12\/Cta-Monitor-S\u0131n\u0131f\u0131-\u0130le-Thread-Kontrol\u00fc.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/12\/Cta-Monitor-S\u0131n\u0131f\u0131-\u0130le-Thread-Kontrol\u00fc.png\" alt=\"C#&#039;ta Monitor S\u0131n\u0131f\u0131 \u0130le Thread Kontrol\u00fc\" width=\"261\" height=\"60\" class=\"aligncenter size-full wp-image-5402\" \/><\/a><\/p>\n<p>Makalemizin ba\u015flar\u0131nda da bahsetti\u011fimiz gibi bu tarz durumlarda senkron bir i\u015fleyi\u015f istiyorsak e\u011fer a\u015fa\u011f\u0131daki gibi Lock blo\u011funu kullanmam\u0131z yeterli olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            object o = new object();\r\n\r\n            Task t1 = new Task(() =&gt;\r\n            {\r\n                lock (o)\r\n                {\r\n                    for (int i = 0; i &lt; 5; i++)\r\n                    {\r\n                        Console.Write(&quot;* &quot;);\r\n                        Thread.Sleep(100);\r\n                    }\r\n                }\r\n            });\r\n            Task t2 = new Task(() =&gt;\r\n            {\r\n                lock (o)\r\n                {\r\n                    for (int i = 0; i &lt; 5; i++)\r\n                    {\r\n                        Console.Write(&quot;- &quot;);\r\n                        Thread.Sleep(100);\r\n                    }\r\n                }\r\n            });\r\n            Task t3 = new Task(() =&gt;\r\n            {\r\n                lock (o)\r\n                {\r\n                    for (int i = 0; i &lt; 5; i++)\r\n                    {\r\n                        Console.Write(&quot;+ &quot;);\r\n                        Thread.Sleep(100);\r\n                    }\r\n                }\r\n            });\r\n            t1.Start();\r\n            t2.Start();\r\n            t3.Start();\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Bu \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z zaman a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcne benzer sonu\u00e7larla kar\u015f\u0131la\u015faca\u011f\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/12\/Cta-Monitor-S\u0131n\u0131f\u0131-\u0130le-Thread-Kontrol\u00fc-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/12\/Cta-Monitor-S\u0131n\u0131f\u0131-\u0130le-Thread-Kontrol\u00fc-1.png\" alt=\"C#&#039;ta Monitor S\u0131n\u0131f\u0131 \u0130le Thread Kontrol\u00fc\" width=\"256\" height=\"48\" class=\"aligncenter size-full wp-image-5403\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi asenkron \u00e7al\u0131\u015fan farkl\u0131 Thread&#8217;lar Lock mekanizmas\u0131 arac\u0131l\u0131\u011f\u0131yla senkron bir \u015fekilde i\u015flenmektedir.<\/p>\n<p>\u015eimdi bu i\u015flemin ayn\u0131s\u0131n\u0131 Monitor s\u0131n\u0131f\u0131 arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            object o = new object();\r\n\r\n            Task t1 = new Task(() =&gt;\r\n            {\r\n                Monitor.Enter(o);\r\n                for (int i = 0; i &lt; 5; i++)\r\n                {\r\n                    Console.Write(&quot;* &quot;);\r\n                    Thread.Sleep(100);\r\n                }\r\n                Monitor.Exit(o);\r\n            });\r\n            Task t2 = new Task(() =&gt;\r\n            {\r\n                Monitor.Enter(o);\r\n                for (int i = 0; i &lt; 5; i++)\r\n                {\r\n                    Console.Write(&quot;- &quot;);\r\n                    Thread.Sleep(100);\r\n                }\r\n                Monitor.Exit(o);\r\n            });\r\n            Task t3 = new Task(() =&gt;\r\n            {\r\n                Monitor.Enter(o);\r\n                for (int i = 0; i &lt; 5; i++)\r\n                {\r\n                    Console.Write(&quot;+ &quot;);\r\n                    Thread.Sleep(100);\r\n                }\r\n                Monitor.Exit(o);\r\n            });\r\n            t1.Start();\r\n            t2.Start();\r\n            t3.Start();\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/12\/Cta-Monitor-S\u0131n\u0131f\u0131-\u0130le-Thread-Kontrol\u00fc-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/12\/Cta-Monitor-S\u0131n\u0131f\u0131-\u0130le-Thread-Kontrol\u00fc-2.png\" alt=\"C#&#039;ta Monitor S\u0131n\u0131f\u0131 \u0130le Thread Kontrol\u00fc\" width=\"265\" height=\"53\" class=\"aligncenter size-full wp-image-5406\" \/><\/a><\/p>\n<p>Benzer \u015fekilde her bir Thread&#8217;\u0131n \u00e7al\u0131\u015fma takibi di\u011fer bir Thread&#8217;a nazaran ba\u015flang\u0131\u00e7 ve biti\u015f olarak baz al\u0131nmakta ve senkron bir vaziyette i\u015flenmektedir. Anlayaca\u011f\u0131n\u0131z Lock mekanizmas\u0131n\u0131n scopelar\u0131n\u0131n yapt\u0131\u011f\u0131 g\u00f6revi Monitor s\u0131n\u0131f\u0131n\u0131n Enter ve Exit metodlar\u0131 \u00fcstlenmektedir.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u015eimdilik ho\u015f\u00e7akal\u0131n&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Asenkron yakla\u015f\u0131m sergiledi\u011fimiz \u00e7al\u0131\u015fmalar\u0131m\u0131zda herhangi bir T an\u0131nda farkl\u0131 Thread&#8217;lardaki i\u015flemleri belirli bir s\u0131ralama g\u00f6zeterek ger\u00e7ekle\u015ftirmek i\u00e7in Lock yap\u0131s\u0131ndan faydalanmaktay\u0131z. Lock yap\u0131s\u0131, farkl\u0131 Thread&#8217;larda \u00e7al\u0131\u015fan Processlerin ayn\u0131 anda i\u015flenmesinden ziyade Lock bloklar\u0131n\u0131n s\u0131ras\u0131yla&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[1556,1555,1205,1557,1559,1560,1394,1558,1235],"class_list":["post-5397","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-c-asenkron","tag-c-asenkron-programlama","tag-lock","tag-monitor","tag-monitor-enter","tag-monitor-exit","tag-senkron","tag-task","tag-thread"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=5397"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5397\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}