{"id":367,"date":"2024-07-18T10:58:11","date_gmt":"2024-07-18T08:58:11","guid":{"rendered":"https:\/\/wi.pb.edu.pl\/p\/?page_id=367"},"modified":"2024-07-18T10:58:11","modified_gmt":"2024-07-18T08:58:11","slug":"threads","status":"publish","type":"page","link":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/","title":{"rendered":"Threads"},"content":{"rendered":"<table border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td>\n<p lang=\"pl-PL\" align=\"center\"><span style=\"font-size: large\"><b>Tworzenie i ko\u0144czenie w\u0105tk\u00f3w<br \/>\n<\/b><\/span><\/p>\n<p lang=\"pl-PL\" align=\"center\">&nbsp;<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<tr>\n<td>\n<p lang=\"pl-PL\">Funkcje wykorzystane na zaj\u0119ciach. Aby z nich skorzysta\u0107 nale\u017cy u\u017cy\u0107 dyrektywy:<br \/>\n<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">#include &lt;pthreads.h&gt;<\/span><\/span><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span style=\"font-family: Courier New, monospace\"><span style=\"font-size: small\">int pthread_create(pthread_t * thread, pthread_attr_t attr, void *<br \/>\n(*start_routine)(void *), void *arg)<\/span><\/span><\/p>\n<p lang=\"pl-PL\">Utworzenie nowego w\u0105tku. Nowy w\u0105tek rozpocznie wykonywanie si\u0119 od funkcji, kt\u00f3rej adres zostanie przekazany jako trzeci argument. Znaczenie parametr\u00f3w:<\/p>\n<p lang=\"pl-PL\"><span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">thread \u2013<span style=\"font-size: medium\"><span style=\"font-family: Times New Roman, serif\">&nbsp;Adres pod kt\u00f3ry zostanie zapisany identyfikator nowo utworzonego w\u0105tku<\/span><\/span><\/span><\/span><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">attr &#8211;&nbsp;<span style=\"font-size: medium\"><span style=\"font-family: Times New Roman, serif\">Atrybuty nowo tworzonego w\u0105tku<\/span><\/span><\/span><\/span>, warto\u015b\u0107 NULL prowadzi do zastosowania atrybut\u00f3w domy\u015blnych, dalsze informacje na stronie manuala funkcji p<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">thread_attr_init<\/span><\/span>.<\/p>\n<p align=\"justify\"><span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\"><span lang=\"pl-PL\">start_routine<\/span>&nbsp;\u2013&nbsp;<\/span><\/span><span lang=\"pl-PL\"><span style=\"font-size: medium\"><span style=\"font-family: Times New Roman, serif\">Adres funkcji, od kt\u00f3rej rozpocznie si\u0119 wykonanie nowo utworzonego w\u0105tku. Funkcja ta powinna mie\u0107 prototyp:<\/span><\/span><\/span><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span style=\"font-family: Courier New, monospace\"><span style=\"font-size: small\">void *f(void *arg)<\/span><\/span><\/p>\n<p><span lang=\"pl-PL\">Po zako\u0144czeniu tej funkcji w\u0105tek ko\u0144czy prac\u0119. Jako arg przekazywany jest czwarty parametr wywo\u0142ania&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">pthread_create<\/span><\/span>. Wynik tej funkcji zostaje przekazany do&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">pthread_join<\/span><\/span>.<\/span><\/p>\n<p lang=\"pl-PL\"><span style=\"font-family: Courier New, monospace\"><span style=\"font-size: small\">arg \u2013<span style=\"font-size: medium\"><span style=\"font-family: Times New Roman, serif\">&nbsp;Argument przekazany do funkcji rozpoczynaj\u0105cej w\u0105tek.<\/span><\/span><\/span><\/span><\/p>\n<p lang=\"pl-PL\"><span style=\"font-family: Times New Roman, serif\"><span style=\"font-size: medium\">Wynik funkcji&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">pthread_create&nbsp;<\/span><\/span>r\u00f3wny 0 oznacza jej pomy\u015blne wykonanie.<\/span><\/span><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span style=\"font-family: Courier New, monospace\"><span style=\"font-size: small\">void pthread_exit(void *retval)<\/span><\/span><\/p>\n<p><span lang=\"pl-PL\">Zako\u0144czenie aktualnego w\u0105tku. Jest to alternatywa dla instrukcji&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">return<\/span><\/span>&nbsp;w&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">start_routine.<\/span><\/span><\/span><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span style=\"font-family: Courier New, monospace\"><span style=\"font-size: small\">retval &#8211;<span style=\"font-size: medium\"><span style=\"font-family: Times New Roman, serif\">&nbsp;wynik przekazany do&nbsp;pthread_join.<\/span><\/span><\/span><\/span><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span style=\"font-family: Courier New, monospace\"><span style=\"font-size: small\">void pthread_join(pthread_t th, void **retadr)<\/span><\/span><\/p>\n<p><span lang=\"pl-PL\">Zawiesza bie\u017c\u0105cy w\u0105tek oczekuj\u0105c na zako\u0144czenie w\u0105tku&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">th<\/span><\/span>.&nbsp;zako\u0144czenie w\u0105tku Wynik zwr\u00f3cony przez zako\u0144czony w\u0105tek zostanie zapami\u0119tany pod adresem&nbsp;<span style=\"font-size: small\"><span style=\"font-family: Courier New, monospace\">retadr<\/span><\/span>.<\/span><\/p>\n<p lang=\"pl-PL\">&nbsp;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p lang=\"pl-PL\"><b>Zadanie 1.<\/b><\/p>\n<p lang=\"pl-PL\" align=\"justify\"><span lang=\"pl-PL\">Napisz program w kt\u00f3rym zadeklarowano zmienn\u0105 globaln\u0105 Licznik. Funkcja main uruchamia dwa w\u0105tki, po czym czeka na zakonczenie dowolnego z nich. W\u0105tek pierwszy w niesko\u0144czonej p\u0119tli wy\u015bwietla warto\u015b\u0107 zmiennej Licznik. W\u0105tek drugi w niesko\u0144czonej p\u0119tli inkrementuje t\u0119 zmienn\u0105. Dodatkowo skompiluj program z opcj\u0105 -O3. Opcja ta w\u0142\u0105cza wszystkie optymalizacje kompilatora. Jak wyt\u0142umaczy\u0107 zmian\u0119 zachowania programu ? Jak temu zaradzi\u0107 ?<\/span><\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<tr>\n<td>\n<p lang=\"pl-PL\" align=\"justify\"><b><span lang=\"pl-PL\">Zadanie 2.<\/span><\/b>&nbsp;Napisz program w kt\u00f3rym funkcja main tworzy 10 w\u0105tk\u00f3w, po czym oczekuje na ich zako\u0144czenie. Ka\u017cdy w\u0105tek powinien wykonywa\u0107 p\u0119tl\u0119 for, w kt\u00f3rej wielokrotnie drukowany by\u0142by napis: \u201cW\u0105tek&nbsp;<i>i<\/i>&nbsp;iteracja&nbsp;<i>k<\/i>\u201d. Ka\u017cdy w\u0105tek powinien wybiera\u0107 losowo liczb\u0119 iteracji p\u0119tli for z przedzia\u0142u [0-10000]. Po zako\u0144czeniu wszystkich w\u0105tk\u00f3w funkcja main powinna wy\u015bwietli\u0107 \u0142\u0105czn\u0105 liczb\u0119 iteracji wykonan\u0105 przez wszystkie w\u0105tki.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>Opracowa\u0142: Wojciech Kwedlo<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Tworzenie i ko\u0144czenie w\u0105tk\u00f3w &nbsp; &nbsp; Funkcje wykorzystane na zaj\u0119ciach. Aby z nich skorzysta\u0107 nale\u017cy<a class=\"read-more\" href=\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/\" title=\"Poka\u017c artyku\u0142 Threads\">wi\u0119cej<\/a><\/p>\n","protected":false},"author":14,"featured_media":0,"parent":364,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-367","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Threads - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej<\/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:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Threads - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\" \/>\n<meta property=\"og:description\" content=\"Tworzenie i ko\u0144czenie w\u0105tk\u00f3w &nbsp; &nbsp; Funkcje wykorzystane na zaj\u0119ciach. Aby z nich skorzysta\u0107 nale\u017cywi\u0119cej\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/\" \/>\n<meta property=\"og:site_name\" content=\"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/\",\"url\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/\",\"name\":\"Threads - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\",\"isPartOf\":{\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/#website\"},\"datePublished\":\"2024-07-18T08:58:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"dr hab. in\u017c. Wojciech Kwedlo\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Dydaktyka\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Systemy operacyjne &#8211; pracownia specjalistyczna\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Threads\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/#website\",\"url\":\"https:\/\/wi.pb.edu.pl\/p\/\",\"name\":\"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wi.pb.edu.pl\/p\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Threads - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","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:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/","og_locale":"pl_PL","og_type":"article","og_title":"Threads - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","og_description":"Tworzenie i ko\u0144czenie w\u0105tk\u00f3w &nbsp; &nbsp; Funkcje wykorzystane na zaj\u0119ciach. Aby z nich skorzysta\u0107 nale\u017cywi\u0119cej","og_url":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/","og_site_name":"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","twitter_card":"summary_large_image","twitter_misc":{"Szacowany czas czytania":"2 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/","url":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/","name":"Threads - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","isPartOf":{"@id":"https:\/\/wi.pb.edu.pl\/p\/#website"},"datePublished":"2024-07-18T08:58:11+00:00","breadcrumb":{"@id":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/threads\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wi.pb.edu.pl\/p\/"},{"@type":"ListItem","position":2,"name":"dr hab. in\u017c. Wojciech Kwedlo","item":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/"},{"@type":"ListItem","position":3,"name":"Dydaktyka","item":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/"},{"@type":"ListItem","position":4,"name":"Systemy operacyjne &#8211; pracownia specjalistyczna","item":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/systemy-operacyjne-pracownia-specjalistyczna\/"},{"@type":"ListItem","position":5,"name":"Threads"}]},{"@type":"WebSite","@id":"https:\/\/wi.pb.edu.pl\/p\/#website","url":"https:\/\/wi.pb.edu.pl\/p\/","name":"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wi.pb.edu.pl\/p\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"}]}},"_links":{"self":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/comments?post=367"}],"version-history":[{"count":2,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/367\/revisions"}],"predecessor-version":[{"id":370,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/367\/revisions\/370"}],"up":[{"embeddable":true,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/364"}],"wp:attachment":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/media?parent=367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}