#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <iostream> #include <unistd.h> #include <semaphore.h> using namespace std; //compile method: g++ thread.cpp -pthread pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; sem_t empty; sem_t full; const int size=1000; int Buffer[size] = {0}; int top = -1; int iNum = 0; void printids(const char *s) { pthread_t tid; tid = pthread_self(); printf("%s tid %lu (0x%lx)\n", s, (unsigned long)tid, (unsigned long)tid); } bool IsFull() { } void *producer(void *arg) { printids("new thread: "); while(1) { while(1) { if(top<size-1) break; } sem_wait( &empty ); // producer: empty-1 pthread_mutex_lock( &mutex1 ); usleep(10); Buffer[++top] = ++iNum; printf("\nP[%d]=%d",top,iNum); pthread_mutex_unlock( &mutex1 ); sem_post( &full ); //producer: full+1 if(iNum==10000) pthread_exit(NULL); } return((void *)0); } void *consumer(void *arg) { printids("new thread: "); while(1) { while(1) { if(top>=0) break; } //usleep(10000); sem_wait( &full ); //comsumer: full-1 pthread_mutex_lock( &mutex1 ); Buffer[top] = 0; printf("\nC[%d]=%d",top,iNum); --top; pthread_mutex_unlock( &mutex1 ); sem_post( &empty ); //comsumer: empty+1 if(iNum==10000) pthread_exit(NULL); } return((void *)0); } int main(void) { int err; pthread_t thread1; pthread_t thread2; sem_init(&empty, 0, 1000); sem_init(&full, 0, 0); err = pthread_create(&thread1, NULL, producer, (char *)"A"); if(err != 0) { printf("\n can't create thread"); } err = pthread_create(&thread2, NULL, consumer, (char *)"B"); if(err != 0) { printf("\n can't create thread"); } printids("main thread:"); pthread_join( thread1, NULL); pthread_join( thread2, NULL); printids("\n end."); exit(0); }
Standard input is empty
main thread: tid 47951881492352 (0x2b9caadcd780) new thread: tid 47951902783232 (0x2b9cac21b700) new thread: tid 47951900681984 (0x2b9cac01a700) P[0]=1 P[1]=2 P[2]=3 P[3]=4 P[4]=5 P[5]=6 P[6]=7 P[7]=8 P[8]=9 P[9]=10 P[10]=11 P[11]=12 P[12]=13 P[13]=14 P[14]=15 P[15]=16 P[16]=17 P[17]=18 P[18]=19 P[19]=20 P[20]=21 P[21]=22 P[22]=23 P[23]=24 P[24]=25 P[25]=26 P[26]=27 P[27]=28 P[28]=29 P[29]=30 P[30]=31 P[31]=32 P[32]=33 P[33]=34 P[34]=35 P[35]=36 P[36]=37 P[37]=38 P[38]=39 P[39]=40 P[40]=41 P[41]=42 P[42]=43 P[43]=44 P[44]=45 P[45]=46 P[46]=47 P[47]=48 P[48]=49 P[49]=50 P[50]=51 P[51]=52 P[52]=53 P[53]=54 P[54]=55 P[55]=56 P[56]=57 P[57]=58 P[58]=59 P[59]=60 P[60]=61 P[61]=62 P[62]=63 P[63]=64 P[64]=65 P[65]=66 P[66]=67 P[67]=68 P[68]=69 P[69]=70 P[70]=71 P[71]=72 P[72]=73 P[73]=74 P[74]=75 P[75]=76 P[76]=77 P[77]=78 P[78]=79 P[79]=80 P[80]=81 P[81]=82 P[82]=83 P[83]=84 P[84]=85 P[85]=86 P[86]=87 P[87]=88 P[88]=89 P[89]=90 P[90]=91 P[91]=92 P[92]=93 P[93]=94 P[94]=95 P[95]=96 P[96]=97 P[97]=98 P[98]=99 P[99]=100 P[100]=101 P[101]=102 P[102]=103 P[103]=104 P[104]=105 P[105]=106 P[106]=107 P[107]=108 P[108]=109 P[109]=110 P[110]=111 P[111]=112 P[112]=113 P[113]=114 P[114]=115 P[115]=116 P[116]=117 P[117]=118 P[118]=119 P[119]=120 P[120]=121 P[121]=122 P[122]=123 P[123]=124 P[124]=125 P[125]=126 P[126]=127 P[127]=128 P[128]=129 P[129]=130 P[130]=131 P[131]=132 P[132]=133 P[133]=134 P[134]=135 P[135]=136 P[136]=137 P[137]=138 P[138]=139 P[139]=140 P[140]=141 P[141]=142 P[142]=143 P[143]=144 P[144]=145 P[145]=146 P[146]=147 P[147]=148 P[148]=149 P[149]=150 P[150]=151 P[151]=152 P[152]=153 P[153]=154 P[154]=155 P[155]=156 P[156]=157 P[157]=158 P[158]=159 P[159]=160 P[160]=161 P[161]=162 P[162]=163 P[163]=164 P[164]=165 P[165]=166 P[166]=167 P[167]=168 P[168]=169 P[169]=170 P[170]=171 P[171]=172 P[172]=173 P[173]=174 P[174]=175 P[175]=176 P[176]=177 P[177]=178 P[178]=179 P[179]=180 P[180]=181 P[181]=182 P[182]=183 P[183]=184 P[184]=185 P[185]=186 P[186]=187 P[187]=188 P[188]=189 P[189]=190 P[190]=191 P[191]=192 P[192]=193 P[193]=194 P[194]=195 P[195]=196 P[196]=197 P[197]=198 P[198]=199 P[199]=200 P[200]=201 P[201]=202 P[202]=203 P[203]=204 P[204]=205 P[205]=206 P[206]=207 P[207]=208 P[208]=209 P[209]=210 P[210]=211 P[211]=212 P[212]=213 P[213]=214 P[214]=215 P[215]=216 P[216]=217 P[217]=218 P[218]=219 P[219]=220 P[220]=221 P[221]=222 P[222]=223 P[223]=224 P[224]=225 P[225]=226 P[226]=227 P[227]=228 P[228]=229 P[229]=230 P[230]=231 P[231]=232 P[232]=233 P[233]=234 P[234]=235 P[235]=236 P[236]=237 P[237]=238 P[238]=239 P[239]=240 P[240]=241 P[241]=242 P[242]=243 P[243]=244 P[244]=245 P[245]=246 P[246]=247 P[247]=248 P[248]=249 P[249]=250 P[250]=251 P[251]=252 P[252]=253 P[253]=254 P[254]=255 P[255]=256 P[256]=257 P[257]=258 P[258]=259 P[259]=260 P[260]=261 P[261]=262 P[262]=263 P[263]=264 P[264]=265 P[265]=266 P[266]=267 P[267]=268 P[268]=269 P[269]=270 P[270]=271 P[271]=272 P[272]=273 P[273]=274 P[274]=275 P[275]=276 P[276]=277 P[277]=278 P[278]=279 P[279]=280 P[280]=281 P[281]=282 P[282]=283 P[283]=284 P[284]=285 P[285]=286 P[286]=287 P[287]=288 P[288]=289 P[289]=290 P[290]=291 P[291]=292 P[292]=293 P[293]=294 P[294]=295 P[295]=296 P[296]=297 P[297]=298 P[298]=299 P[299]=300 P[300]=301 P[301]=302 P[302]=303 P[303]=304 P[304]=305 P[305]=306 P[306]=307 P[307]=308 P[308]=309 P[309]=310 P[310]=311 P[311]=312 P[312]=313 P[313]=314 P[314]=315 P[315]=316 P[316]=317 P[317]=318 P[318]=319 P[319]=320 P[320]=321 P[321]=322 P[322]=323 P[323]=324 P[324]=325 P[325]=326 P[326]=327 P[327]=328 P[328]=329 P[329]=330 P[330]=331 P[331]=332 P[332]=333 P[333]=334 P[334]=335 P[335]=336 P[336]=337 P[337]=338 P[338]=339 P[339]=340 P[340]=341 P[341]=342 P[342]=343 P[343]=344 P[344]=345 P[345]=346 P[346]=347 P[347]=348 P[348]=349 P[349]=350 P[350]=351 P[351]=352 P[352]=353 P[353]=354 P[354]=355 P[355]=356 P[356]=357 P[357]=358 P[358]=359 P[359]=360 P[360]=361 P[361]=362 P[362]=363 P[363]=364 P[364]=365 P[365]=366 P[366]=367 P[367]=368 P[368]=369 P[369]=370 P[370]=371 P[371]=372 P[372]=373 P[373]=374 P[374]=375 P[375]=376 P[376]=377 P[377]=378 P[378]=379 P[379]=380 P[380]=381 P[381]=382 P[382]=383 P[383]=384 P[384]=385 P[385]=386 P[386]=387 P[387]=388 P[388]=389 P[389]=390 P[390]=391 P[391]=392 P[392]=393 P[393]=394 P[394]=395 P[395]=396 P[396]=397 P[397]=398 P[398]=399 P[399]=400 P[400]=401 P[401]=402 P[402]=403 P[403]=404 P[404]=405 P[405]=406 P[406]=407 P[407]=408 P[408]=409 P[409]=410 P[410]=411 P[411]=412 P[412]=413 P[413]=414 P[414]=415 P[415]=416 P[416]=417 P[417]=418 P[418]=419 P[419]=420 P[420]=421 P[421]=422 P[422]=423 P[423]=424 P[424]=425 P[425]=426 P[426]=427 P[427]=428 P[428]=429 P[429]=430 P[430]=431 P[431]=432 P[432]=433 P[433]=434 P[434]=435 P[435]=436 P[436]=437 P[437]=438 P[438]=439 P[439]=440 P[440]=441 P[441]=442 P[442]=443 P[443]=444 P[444]=445 P[445]=446 P[446]=447 P[447]=448 P[448]=449 P[449]=450 P[450]=451 P[451]=452 P[452]=453 P[453]=454 P[454]=455 P[455]=456 P[456]=457 P[457]=458 P[458]=459 P[459]=460 P[460]=461 P[461]=462 P[462]=463 P[463]=464 P[464]=465 P[465]=466 P[466]=467 P[467]=468 P[468]=469 P[469]=470 P[470]=471 P[471]=472 P[472]=473 P[473]=474 P[474]=475 P[475]=476 P[476]=477 P[477]=478 P[478]=479 P[479]=480 P[480]=481 P[481]=482 P[482]=483 P[483]=484 P[484]=485 P[485]=486 P[486]=487 P[487]=488 P[488]=489 P[489]=490 P[490]=491 P[491]=492 P[492]=493 P[493]=494 P[494]=495 P[495]=496 P[496]=497 P[497]=498 P[498]=499 P[499]=500 P[500]=501 P[501]=502 P[502]=503 P[503]=504 P[504]=505 P[505]=506 P[506]=507 P[507]=508 P[508]=509 P[509]=510 P[510]=511 P[511]=512 P[512]=513 P[513]=514 P[514]=515 P[515]=516 P[516]=517 P[517]=518 P[518]=519 P[519]=520 P[520]=521 P[521]=522 P[522]=523 P[523]=524 P[524]=525 P[525]=526 P[526]=527 P[527]=528 P[528]=529 P[529]=530 P[530]=531 P[531]=532 P[532]=533 P[533]=534 P[534]=535 P[535]=536 P[536]=537 P[537]=538 P[538]=539 P[539]=540 P[540]=541 P[541]=542 P[542]=543 P[543]=544 P[544]=545 P[545]=546 P[546]=547 P[547]=548 P[548]=549 P[549]=550 P[550]=551 P[551]=552 P[552]=553 P[553]=554 P[554]=555 P[555]=556 P[556]=557 P[557]=558 P[558]=559 P[559]=560 P[560]=561 P[561]=562 P[562]=563 P[563]=564 P[564]=565 P[565]=566 P[566]=567 P[567]=568 P[568]=569 P[569]=570 P[570]=571 P[571]=572 P[572]=573 P[573]=574 P[574]=575 P[575]=576 P[576]=577 P[577]=578 P[578]=579 P[579]=580 P[580]=581 P[581]=582 P[582]=583 P[583]=584 P[584]=585 P[585]=586 P[586]=587 P[587]=588 P[588]=589 P[589]=590 P[590]=591 P[591]=592 P[592]=593 P[593]=594 P[594]=595 P[595]=596 P[596]=597 P[597]=598 P[598]=599 P[599]=600 P[600]=601 P[601]=602 P[602]=603 P[603]=604 P[604]=605 P[605]=606 P[606]=607 P[607]=608 P[608]=609 P[609]=610 P[610]=611 P[611]=612 P[612]=613 P[613]=614 P[614]=615 P[615]=616 P[616]=617 P[617]=618 P[618]=619 P[619]=620 P[620]=621 P[621]=622 P[622]=623 P[623]=624 P[624]=625 P[625]=626 P[626]=627 P[627]=628 P[628]=629 P[629]=630 P[630]=631 P[631]=632 P[632]=633 P[633]=634 P[634]=635 P[635]=636 P[636]=637 P[637]=638 P[638]=639 P[639]=640 P[640]=641 P[641]=642 P[642]=643 P[643]=644 P[644]=645 P[645]=646 P[646]=647 P[647]=648 P[648]=649 P[649]=650 P[650]=651 P[651]=652 P[652]=653 P[653]=654 P[654]=655 P[655]=656 P[656]=657 P[657]=658 P[658]=659 P[659]=660 P[660]=661 P[661]=662 P[662]=663 P[663]=664 P[664]=665 P[665]=666 P[666]=667 P[667]=668 P[668]=669 P[669]=670 P[670]=671 P[671]=672 P[672]=673 P[673]=674 P[674]=675 P[675]=676 P[676]=677 P[677]=678 P[678]=679 P[679]=680 P[680]=681 P[681]=682 P[682]=683 P[683]=684 P[684]=685 P[685]=686 P[686]=687 P[687]=688 P[688]=689 P[689]=690 P[690]=691 P[691]=692 P[692]=693 P[693]=694 P[694]=695 P[695]=696 P[696]=697 P[697]=698 P[698]=699 P[699]=700 P[700]=701 P[701]=702 P[702]=703 P[703]=704 P[704]=705 P[705]=706 P[706]=707 P[707]=708 P[708]=709 P[709]=710 P[710]=711 P[711]=712 P[712]=713 P[713]=714 P[714]=715 P[715]=716 P[716]=717 P[717]=718 P[718]=719 P[719]=720 P[720]=721 P[721]=722 P[722]=723 P[723]=724 P[724]=725 P[725]=726 P[726]=727 P[727]=728 P[728]=729 P[729]=730 P[730]=731 P[731]=732 P[732]=733 P[733]=734 P[734]=735 P[735]=736 P[736]=737 P[737]=738 P[738]=739 P[739]=740 P[740]=741 P[741]=742 P[742]=743 P[743]=744 P[744]=745 P[745]=746 P[746]=747 P[747]=748 P[748]=749 P[749]=750 P[750]=751 P