fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <iostream>
  5. #include <unistd.h>
  6. #include <semaphore.h>
  7. using namespace std;
  8.  
  9. //compile method: g++ thread.cpp -pthread
  10.  
  11. pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
  12. sem_t empty;
  13. sem_t full;
  14. const int size=1000;
  15. int Buffer[size] = {0};
  16. int top = -1;
  17. int iNum = 0;
  18.  
  19.  
  20. void printids(const char *s)
  21. {
  22. pthread_t tid;
  23.  
  24. tid = pthread_self();
  25. printf("%s tid %lu (0x%lx)\n", s, (unsigned long)tid, (unsigned long)tid);
  26. }
  27.  
  28. bool IsFull()
  29. {
  30.  
  31. }
  32.  
  33. void *producer(void *arg)
  34. {
  35. printids("new thread: ");
  36.  
  37. while(1)
  38. {
  39. while(1)
  40. {
  41. if(top<size-1)
  42. break;
  43. }
  44.  
  45. sem_wait( &empty ); // producer: empty-1
  46. pthread_mutex_lock( &mutex1 );
  47.  
  48. usleep(10);
  49.  
  50. Buffer[++top] = ++iNum;
  51. printf("\nP[%d]=%d",top,iNum);
  52.  
  53. pthread_mutex_unlock( &mutex1 );
  54. sem_post( &full ); //producer: full+1
  55.  
  56. if(iNum==10000)
  57. pthread_exit(NULL);
  58. }
  59.  
  60. return((void *)0);
  61. }
  62.  
  63. void *consumer(void *arg)
  64. {
  65. printids("new thread: ");
  66.  
  67. while(1)
  68. {
  69. while(1)
  70. {
  71. if(top>=0)
  72. break;
  73. }
  74.  
  75. //usleep(10000);
  76.  
  77. sem_wait( &full ); //comsumer: full-1
  78. pthread_mutex_lock( &mutex1 );
  79.  
  80. Buffer[top] = 0;
  81. printf("\nC[%d]=%d",top,iNum);
  82. --top;
  83.  
  84. pthread_mutex_unlock( &mutex1 );
  85. sem_post( &empty ); //comsumer: empty+1
  86.  
  87. if(iNum==10000)
  88. pthread_exit(NULL);
  89. }
  90.  
  91. return((void *)0);
  92. }
  93.  
  94. int main(void)
  95. {
  96. int err;
  97. pthread_t thread1;
  98. pthread_t thread2;
  99.  
  100. sem_init(&empty, 0, 1000);
  101. sem_init(&full, 0, 0);
  102.  
  103. err = pthread_create(&thread1, NULL, producer, (char *)"A");
  104. if(err != 0)
  105. {
  106. printf("\n can't create thread");
  107. }
  108. err = pthread_create(&thread2, NULL, consumer, (char *)"B");
  109. if(err != 0)
  110. {
  111. printf("\n can't create thread");
  112. }
  113.  
  114. printids("main thread:");
  115.  
  116. pthread_join( thread1, NULL);
  117. pthread_join( thread2, NULL);
  118.  
  119. printids("\n end.");
  120.  
  121. exit(0);
  122. }
Time limit exceeded #stdin #stdout 5s 4384KB
stdin
Standard input is empty
stdout
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