{"id":3845,"date":"2020-07-16T15:06:29","date_gmt":"2020-07-16T06:06:29","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=3845"},"modified":"2020-07-16T15:45:47","modified_gmt":"2020-07-16T06:45:47","slug":"sync-mutex-unix-network-programming-p161","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/sync-mutex-unix-network-programming-p161\/","title":{"rendered":"sync, mutex. unix network programming p161"},"content":{"rendered":"\n<p>\ub2e4\uc2dc thread\ub85c \ub3cc\uc544\uc654\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdlib.h>\n#include &lt;stdio.h>\n#include &lt;string.h>\n#include &lt;pthread.h>\n#define\tMAXNITEMS \t\t1000000\n#define\tMAXNTHREADS\t\t\t100\n#define MIN(X,Y) ((X)&lt;(Y) ? (X) : (Y))\n\n\n\n\/\/gcc -lpthread \uc635\uc158\uc73c\ub85c \ucef4\ud30c\uc77c.\nint\t\tnitems;\t\t\t\/* read-only by producer and consumer *\/\n\n\n\/\/shared\ub97c \ucd08\uae30\ud654 \ud558\ub294\ub370,\n\/\/\ub9e8 \ucc98\uc74c\uc5d0 mutext\uac00 \uc788\uc74c.\n\/\/\ub098\uba38\uc9c0\ub294 0\uc73c\ub85c \ucd08\uae30\ud654\ub428..\nstruct {\n  pthread_mutex_t\tmutex;\n  int\tbuff[MAXNITEMS];\n  int\tnput;\n  int\tnval;\n} shared = { PTHREAD_MUTEX_INITIALIZER };\n\nvoid\t*produce(void *), *consume(void *);\n\n\nint\nmain(int argc, char **argv)\n{\n\tint\t\t\ti, nthreads, count[MAXNTHREADS];\n\tpthread_t\ttid_produce[MAXNTHREADS], tid_consume;\n\t\/\/\uc55e\uc5d0\uc11c\ubd80\ud130 \ucd08\uae30\ud654.\n\tstruct test {\n\t\tint no1;\n\t\tint no2;\n\t} teststruct = {10};\n\n\tif (argc != 3)\n\t\tperror(\"usage: prodcons2 &lt;#items> &lt;#threads>\");\n\tnitems = MIN(atoi(argv[1]), MAXNITEMS);\n\tnthreads = MIN(atoi(argv[2]), MAXNTHREADS);\n\n\t\/\/pthread_setconcurrency();\n\t\t\/* 4start all the producer threads *\/\n\tfor (i = 0; i &lt; nthreads; i++) {\n\t\tcount[i] = 0;\n\t\tpthread_create(&amp;tid_produce[i], NULL, produce, &amp;count[i]);\n\t}\n\n\t\t\/* 4wait for all the producer threads *\/\n\tfor (i = 0; i &lt; nthreads; i++) {\n\t\tpthread_join(tid_produce[i], NULL);\n\t\tprintf(\"count[%d] = %d\\n\", i, count[i]);\t\n\t}\n\n\t\t\/* 4start, then wait for the consumer thread *\/\n\tpthread_create(&amp;tid_consume, NULL, consume, NULL);\n\tpthread_join(tid_consume, NULL);\n\n\texit(0);\n}\n\/* end main *\/\n\n\/* include producer *\/\nvoid *\nproduce(void *arg)\n{\n\tfor ( ; ; ) {\n\t\tpthread_mutex_lock(&amp;shared.mutex);\n\t\tif (shared.nput >= nitems) {\n\t\t\tpthread_mutex_unlock(&amp;shared.mutex);\n\t\t\treturn(NULL);\t\t\/* array is full, we're done *\/\n\t\t}\n\t\tshared.buff[shared.nput] = shared.nval;\n\t\tshared.nput++;\n\t\tshared.nval++;\n\t\tpthread_mutex_unlock(&amp;shared.mutex);\n\t\t*((int *) arg) += 1;\n\t}\n}\n\nvoid *\nconsume(void *arg)\n{\n\tint\t\ti;\n\n\tfor (i = 0; i &lt; nitems; i++) {\n\t\tif (shared.buff[i] != i)\n\t\t\tprintf(\"buff[%d] = %d\\n\", i, shared.buff[i]);\n\t}\n\treturn(NULL);\n}\n\/* end producer *\/\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ub2e4\uc2dc thread\ub85c \ub3cc\uc544\uc654\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12],"tags":[775,53,785,781,784],"class_list":["post-3845","post","type-post","status-publish","format-standard","hentry","category-12","tag-c","tag-linux","tag-mutex","tag-network-program","tag-pthread"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3845","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=3845"}],"version-history":[{"count":2,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3845\/revisions"}],"predecessor-version":[{"id":3847,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3845\/revisions\/3847"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=3845"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=3845"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=3845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}